在TypeScript中,是什么!(惊叹号/ bang)运算符取消引用成员时?

TypeScript

别坑我

2020-05-25

在查看tslint规则的源代码时,我遇到了以下语句:

if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
    return;
}

之后请注意!运算符node.parent有趣!

我首先尝试使用当前安装的TS(1.5.3)版本在本地编译文件。产生的错误指出了爆炸的确切位置:

$ tsc --noImplicitAny memberAccessRule.ts 
noPublicModifierRule.ts(57,24): error TS1005: ')' expected.

接下来,我升级到了最新的TS(2.1.6),可以毫无问题地对其进行编译。因此,这似乎是TS 2.x的功能。但是编译完全忽略了爆炸,导致出现以下JS:

if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
    return;
}

到目前为止,我的Google赋使我失败了。

TS的感叹号运算符是什么,它如何工作?

第4174篇《在TypeScript中,是什么!(惊叹号/ bang)运算符取消引用成员时?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

1个回答
神无 2020.05.25

路易的回答很好,但我想我会简要总结一下:

bang运算符告诉编译器暂时放宽其可能要求的“非空”约束。它对编译器说:“作为开发人员,我比您更清楚此变量现在不能为null”。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android