TypeScript可以警告我非空断言运算符的多余用法吗?

sen*_*hin 10 typescript

请考虑以下TypeScript代码:

let x = { foo: { bar: "baz" } };
console.log(x.foo!.bar);
Run Code Online (Sandbox Code Playgroud)

这里,推断类型x.foo{ bar: string },因此不需要使用非null断言运算符!(参见例如https://github.com/Microsoft/TypeScript/issues/7395):编译器已经知道x.foo不能是空的.

tsc(或者可能是像TSLint这样广泛使用的第三方工具)可以警告我这些多余的用途!,和/或这是一个有计划的功能吗?

我确信这在原则上是可行的(似乎只是使用TypeScript编译器API来识别在!类型不是T | null或的变量上使用的地方T | undefined); 我只是想知道是否已经完成了繁重的工作.或者,我想,指向TypeScript编译器API的相关部分的指针也可以工作 - 很难找到它的文档(我想因为它还不稳定).

(我想问的原因是,我担心我会最终不得不处理代码,其中过去我有些白痴洒!到处做出tsc --strictNullChecks停止发放错误,实际上并没有考虑断言变量是否确实是非如果它在运行时最终为null,那么瞧!我们可以在编译时捕获一个错误,但是由于过于热心而没有!.!在已知的非变量变量上存在s会强烈暗示代码过度使用!,可能是错误的.)

Mic*_*ard 0

不,目前看来还不能。为了进入编译器代码库,我在我的分支上这样做了: https: //github.com/Sheeo/TypeScript/commit/e6d1651e4d28493b6e5f20d027ad8e86f7451552

您可以通过克隆存储库并使用该版本的编译器来运行它 - 请记住启用 strictNullChecks :)