【问题标题】:What does !: mean in Typescript?!: 在打字稿中是什么意思?
【发布时间】:2019-11-15 21:34:59
【问题描述】:

【问题讨论】:

标签: typescript vue.js


【解决方案1】:

会有这样一种场景,TypeScript 认为某个属性、变量是nullundefined。但是如果你确定这个变量不能为空,那么你可以使用这个运算符。

考虑这个例子:

let a = document.getElementById('hello');

if (a) {
    a.style.width = '100px';
}

TypeScript 假定变量 a 可能为 null,因为无法保证此元素存在。因此,在您可以访问该变量之前,您已经输入了if 保护。但是如果你知道你的应用程序总是会有一个 ID 为 #hello 的 HTML 元素,那么你可以将上面的代码重写为:

const a = document.getElementById('hello');

a!.style.width = '100px';

上面的代码更易读,更简洁。在https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html 阅读更多信息

编辑:@Simon 在技术上正确的评论:具体来说,操作 x!产生一个 x 类型的值,排除 null 和 undefined。

【讨论】:

  • private title?: string; private num!: number; private isDone!: boolean; private isReceived!: boolean;
  • 比这更具体。 确切地了解它的作用很重要,否则它会在某一天回来咬你 - "Specifically, the operation x! produces a value of the type of x with null and undefined excluded."。您的回答也暗示这两个代码块是等效的。您拥有的第一个代码块更安全 - 第二个实际上可能有错误。然而,这完全取决于编译器警告 - 这是唯一的事情!确实 - 是 Typescript 已知的“调整类型”。 使用 ! 不会影响运行时代码
  • downvoting 因为答案没有解释问题中的代码示例如何影响类型检查,并且该示例虽然相关,但并没有直接解决所提出的问题,只会让读者感到困惑。请参阅下面iislucas的答案
【解决方案2】:

这是一个“明确的赋值断言”:varname !: sometype 通知 typescript 不要担心检查 varname 是否可能未分配(它告诉 typescript varname 肯定会被分配,即使 typescript 无法推断它在哪里分配)。通常打字稿会检查变量是否可能未分配,并给出错误。

欲了解更多信息,请参阅:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#definite-assignment-assertions

【讨论】:

  • 这是正确的答案,因为问题不是关于“非空断言运算符”。如链接文档中所述:“从某种意义上说,明确赋值断言运算符是非空断言运算符的对偶(其中表达式后置有一个!),我们也可以在示例中使用它。 "
猜你喜欢
  • 2021-04-24
  • 2018-09-12
  • 2021-04-21
  • 2021-01-02
  • 2021-03-27
  • 1970-01-01
  • 2019-12-19
  • 2016-12-02
相关资源
最近更新 更多