1

我进行了很多研究,但无法找出 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 之后,相同的代码会产生错误:

错误 TS2322:类型“布尔 | undefined' 不能分配给类型 'boolean'。类型“未定义”不可分配给类型“布尔”。

9 [isRange]="isRange"

只有在我将输入更改为:

@Input() isRange?= false;

我总是指 angular 11/TS4,因为即使我真的认为这是由 TS 引起的,但在研究时我并不能完全确定这一点。

我的问题是,为什么?现在需要具有默认值的属性,最重要的是,它的工作方式是否相同?例如,如果我插入,只需添加?它会设置默认值吗?falseundefined

我真的很想回到以前的(IMO 正确)行为,而无需停用任何重要的检查,例如strictTemplateCheck. 因为即使项目构建(虽然我不确定这是正确的方法),我现在仍然需要!在我的代码中使用很多,让 TS 知道该属性应该有一个值。

如果您知道它在哪里,请将文档链接添加到您的答案/评论中。

如果有任何不清楚的地方,请告诉我。

谢谢!

4

1 回答 1

1

这种行为是在 TS v4 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#class-property-inference-from-constructors中引入的

如果您确定值处理得当?,两者都可以!undefined

于 2021-01-12T16:23:22.693 回答