【问题标题】:What does the ! mean in the angular syntax? [duplicate]是什么!在角度语法中是什么意思? [复制]
【发布时间】:2019-10-16 13:07:23
【问题描述】:

我现在已经在几个地方看到了这种情况,但还没有找到任何答案。

我很好奇“!”是什么bang 在角度语法中确实如此。

【问题讨论】:

标签: javascript angular typescript


【解决方案1】:

来自Angular documentation

非空断言运算符 (!)

从 Typescript 2.0 开始,您可以使用 --strictNullChecks 标志。然后 TypeScript 确保没有变量是无意的 nullundefined

在这种模式下,类型化变量默认不允许nullundefined。 如果您未分配变量或未分配变量,类型检查器将引发错误 尝试将 nullundefined 分配给类型不允许的变量 nullundefined

如果类型检查器无法确定是否存在 变量将在运行时为nullundefined。你可能知道不能 发生但类型检查器不知道。你告诉类型检查器 应用后缀 non-null assertion operator (!) 不会发生这种情况。

Angular 非空断言运算符 (!) 在 一个 Angular 模板。

例如,在您使用*ngIf 检查hero 是否已定义后,您 可以断言hero 属性也已定义。

<!--No hero, no text -->
<div *ngIf="hero">
  The hero's name is {{hero!.name}}
</div>

当 Angular 编译器将您的模板转换为 TypeScript 代码时,它 防止 TypeScript 报告 hero.name 可能是 nullundefined.

safe navigation operator 不同,非空断言运算符 不防范nullundefined。而是告诉 TypeScript 类型检查器暂停对特定对象的严格空检查 属性表达式。

当您开启严格的 null 时,您将需要此模板运算符 检查。否则它是可选的。

【讨论】:

    【解决方案2】:

    它被称为"Non-null assertion operator",与 Angular 本身无关,它来自 typescript。

    let s = e!.name;  // Assert that e is non-null and access name
    

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2015-07-15
      • 2018-07-17
      • 2012-08-13
      • 2014-11-07
      相关资源
      最近更新 更多