Angular Material2&CDK在布尔属性输入的setters中广泛使用了convertebooleanproperty,但不一致地使用类型。在它们自己的代码中,在某些情况下,我们看到getter返回值和setter参数以及类型化的内部属性
boolean
. 例如:
@Input()
get myProperty(): boolean { return this._myProperty; }
set myProperty(value: boolean) { this._myProperty = coerceBooleanProperty(value); }
private _myProperty: boolean = false;
在其他情况下,我们只看到键入的setter参数(这似乎是Material2&CDK中最常见的模式):
@Input()
get myProperty() { return this._myProperty; }
set myProperty(value: boolean) { this._myProperty = coerceBooleanProperty(value); }
private _myProperty = false;
有时我们看到getter和setter类型为
any
:
@Input()
get myProperty(): any { return this._myProperty; }
set myProperty(value: any) { this._myProperty = coerceBooleanProperty(value); }
private _myProperty = false;
有时两者都没有输入,但内部属性是故意输入的
布尔型
:
@Input()
get myProperty() { return this._myProperty; }
set myProperty(value) { this._myProperty = coerceBooleanProperty(value); }
private _myProperty: boolean = false;
在我看来,第一个示例(将getter返回值和setter参数同时输入为布尔值)是“正确的”方法,因为这将强制应用程序或库typescript代码正确使用该属性。但他们自己的代码使用缺乏一致性,这让我怀疑是否有什么我没有考虑过的。或者,这仅仅是一个较新的实现对较旧的实现进行改进的问题。
这里的首选模式是什么?为什么?