!:Angular中的符号

boo*_*oot 2 typescript angular

我发现!:Angular Deprecation文档中使用了表示法。

@Input() tpl !: TemplateRef<any>;
@ContentChild(TemplateRef) inlineTemplate !: TemplateRef<any>;
Run Code Online (Sandbox Code Playgroud)

这里也找到了同样的东西

@Input() id !: string;
Run Code Online (Sandbox Code Playgroud)

我不确定!:Angular中表示法的术语(或背后的概念)是什么。谷歌搜索对我没有多大帮助。尝试使用SymbolHound和Angular Docs相同,但都徒劳。

如果有人可以阐明它的功能(例如它的功能)或至少共享doc链接,这将很有帮助。

Pac*_*ace 25

如果你有strictNullChecks,那么你装饰的任何东西@Input通常都会抱怨。例如...

public class MyComponent {

  @Input()
  public myField: string;

  constructor() {}

}
Run Code Online (Sandbox Code Playgroud)

这会导致TS抱怨。这是因为myField尚未声明为可为空,因此不应将其设置为nullor undefined。同时,它在构造函数中没有被初始化,所以它会得到一个初始值undefined

通常,这很好。我们知道 Angular 会在构建后不久设置该值。如果我们将字段标记为可空,public myField: string?那么this field may be null当我们尝试使用它时,我们将不得不到处处理错误。

因此,作为妥协,我们!在字段声明上抛出一个,以告诉 Typescript “我知道这看起来像是被初始化为 null/undefined 但相信我,我会处理它”。

  • 明白了!很高兴您回答了解释。对未来的读者会有帮助 (4认同)

sla*_*dan 5

感叹号!表明该字段是非null非不确定的(请参阅Microsoft的TypeScript文档)。

冒号:只是字段名称和类型之间的分隔符。

  • 哦,所以它更多的是 Typescript 的一个功能,一般来说与 Angular 无关 (2认同)