3 回答
TA贡献1824条经验 获得超8个赞
那是非空断言运算符。这是一种告诉编译器“这个表达式不能null或undefined在这里,所以不要抱怨它null或它的可能性undefined”的方法。有时类型检查器本身无法做出决定。
这里解释如下:
可以使用新的
!post-fix表达式运算符来断言其操作数在类型检查器无法推断该事实的上下文中是非空且非未定义的。具体而言,该操作x!产生x具有null和undefined排除的类型的值。类似键入的形式断言<T>x和x as T,所述!非空断言操作者简单地在所发射的JavaScript代码移除。
我发现在这个解释中使用“断言”一词有点误导。它是“断言”的,即开发人员断言它,而不是在将要执行测试的意义上。最后一行确实表明它不会发出任何JavaScript代码。
TA贡献2039条经验 获得超8个赞
路易斯的答案很棒,但我想我会试着简洁地总结一下:
bang运算符告诉编译器暂时放松它可能需要的“非空”约束。它告诉编译器:“作为开发人员,我比你更了解这个变量现在不能为null”。
TA贡献1875条经验 获得超5个赞
作为一个激励性的例子:使用新的ES Map类型和dict.has(key) ? dict.get(key) : 'default';TS编译器之类的代码不能推断出get调用永远不会返回null / undefined。dict.has(key) ? dict.get(key)! : 'default';正确缩小类型。
添加回答
举报
