Angular @input 属性以感叹号结尾?

Ole*_*Ole 12 javascript typescript ecmascript-6 angular

源代码具有@Input!. 这是一个例子:

@Input() token!:StripeToken
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下有用!?一些评论指出它是一个非空断言运算符,但为什么在这个特定场景中它有用(或者可能没用)?

我认为这个问题的答案是,对于 Angular@Input属性来说,在属性末尾具有非空断言永远没有意义,但我想看看你们其他人是怎么想的?

更新

我在一个新的 Angular 项目上尝试过,但收到以下错误:

明确的赋值断言 '!' 在这种情况下不允许。ts(1255)

!所以我认为将运营商纳入财产是没有意义的@Input。这是一个屏幕截图:

在此输入图像描述

fri*_*doo 17

它们使用编译器选项strictPropertyInitialization,因此任何未使用类型声明且未undefined直接初始化或在构造函数中初始化的类属性都会产生错误 TS2564。

\n\n

在此输入图像描述

\n\n

为了防止这个编译器错误,他们使用明确赋值断言修饰符来告诉 TypeScript

\n\n
\n

...确实为所有意图和目的分配了一个变量,即使 TypeScript\xe2\x80\x99s 分析无法检测到这一点。

\n
\n\n

在此输入图像描述

\n\n

演示

\n\n

进一步阅读:https://mariusschulz.com/blog/strict-property-initialization-in-typescript#solution-4-definite-assignment-assertion

\n\n

关于您的更新

\n\n

没有在示例中指定title变量的类型,这就是您收到错误 TS1255 的原因。在这种情况下使用!是可能的并且有意义!

\n