!。打字稿运算符理解

!. typescript operator understanding

每当我使用 !.运算符与打字稿,我的编译错误消失了,但我搜索了一下,我不清楚 !. 代表什么。

例如,找到一个div:

let twelveDiv = Array.from(timePickerDivs).find(element => element.innerHTML === '12')

这会产生一个有意义的编译错误:

twelveDiv?.innerHTML = '00'; //The left-hand side of an assignment expression may not be an optional property access.ts(2779)

然而!.解决它:

twelveDiv!.innerHTML = '00'; // no compilation error.

同样适用于简单的 class:

class MyAwesomeClass {
  private myNumber: number; //Property 'myNumber' has no initializer and is not definitely assigned in the constructor.ts(2564)
}

在这种情况下,?.!.都解决了编译错误。

我熟悉 functions/classes 中可选属性和参数的 ?.,但对 !. 不是很熟悉。谢谢。

!non-null assertion operator。你在告诉打字稿“我知道这看起来可能是 null/undefined,但相信我,它不是”。在打字稿无法确定您的代码消除了 null 或 undefined 的可能性的情况下,偶尔需要这样做。

但请注意,与任何类型断言一样,您是在告诉打字稿不要检查您的工作。如果你使用它,它实际上 可以 是 null/undefined,打字稿不会提醒你这个事实,你会在运行时得到一个错误。