如何在 Angular 11 / TS 4 上正确使用属性的默认值?
How to properly use default values for properties on Angular 11 / TS 4?
我进行了很多研究,但无法找出 angular 11/TS4 上的默认属性发生了什么。
例如,在 Angular 10 / TS 3 上,这工作得很好:
export class MyDirective {
@Input() isRange = false;
}
消费者TS
isRange?: boolean;
消费者HTML
<div myDirective [isRange]="isRange"></div>
我能够将 isRange
设置为可选的 属性 并且它会起作用,这非常有意义,因为默认属性确实应该假定对于任何空值,它会使用它的默认。无论如何,这就是它发生在其他语言上的方式......
但是现在,在迁移到 angular 11/TS4 之后,相同的代码会生成错误:
error TS2322: Type 'boolean | undefined' is not assignable to type 'boolean'.
Type 'undefined' is not assignable to type 'boolean'.
9 [isRange]="isRange"
错误仅在我将输入更改为:
后才消失
@Input() isRange?= false;
我总是指的是 angular 11/TS4,因为即使我真的认为这是由 TS 引起的,但在研究时我不能完全确定。
我的问题是,为什么具有默认值的属性现在需要 ?
,最重要的是,它的工作方式是否相同?例如,如果我插入 undefined
?
,只需添加 ?
就可以设置默认的 false
值
我真的很喜欢 return 以前的(IMO 正确)行为的方法,而无需停用任何重要的检查,例如 strictTemplateCheck
。因为即使项目构建(尽管我不确定这是正确的方法),我现在仍然必须在我的代码中使用很多 !
,让 TS 知道 属性应该有一个值。
如果您知道它在哪里,请将文档 link 添加到您的 answer/comment。
如果有任何不清楚的地方,请告诉我。
谢谢!
此行为是在 TS v4 中引入的 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#class-property-inference-from-constructors
如果您确定 undefined
值处理得当,?
和 !
都可以
我进行了很多研究,但无法找出 angular 11/TS4 上的默认属性发生了什么。
例如,在 Angular 10 / TS 3 上,这工作得很好:
export class MyDirective {
@Input() isRange = false;
}
消费者TS
isRange?: boolean;
消费者HTML
<div myDirective [isRange]="isRange"></div>
我能够将 isRange
设置为可选的 属性 并且它会起作用,这非常有意义,因为默认属性确实应该假定对于任何空值,它会使用它的默认。无论如何,这就是它发生在其他语言上的方式......
但是现在,在迁移到 angular 11/TS4 之后,相同的代码会生成错误:
error TS2322: Type 'boolean | undefined' is not assignable to type 'boolean'. Type 'undefined' is not assignable to type 'boolean'.
9 [isRange]="isRange"
错误仅在我将输入更改为:
后才消失@Input() isRange?= false;
我总是指的是 angular 11/TS4,因为即使我真的认为这是由 TS 引起的,但在研究时我不能完全确定。
我的问题是,为什么具有默认值的属性现在需要 ?
,最重要的是,它的工作方式是否相同?例如,如果我插入 undefined
?
?
就可以设置默认的 false
值
我真的很喜欢 return 以前的(IMO 正确)行为的方法,而无需停用任何重要的检查,例如 strictTemplateCheck
。因为即使项目构建(尽管我不确定这是正确的方法),我现在仍然必须在我的代码中使用很多 !
,让 TS 知道 属性应该有一个值。
如果您知道它在哪里,请将文档 link 添加到您的 answer/comment。
如果有任何不清楚的地方,请告诉我。
谢谢!
此行为是在 TS v4 中引入的 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#class-property-inference-from-constructors
如果您确定 undefined
值处理得当,?
和 !
都可以