!。打字稿运算符理解
!. 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,打字稿不会提醒你这个事实,你会在运行时得到一个错误。
每当我使用 !.运算符与打字稿,我的编译错误消失了,但我搜索了一下,我不清楚 !.
代表什么。
例如,找到一个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,打字稿不会提醒你这个事实,你会在运行时得到一个错误。