用于检查未定义和 NULL 类属性的 TSLint 规则

Ild*_*dar 3 typescript tslint

在我的 Web 应用程序中,当我定义必须包含某种数据类型的类属性时,我总是指定此数据类型。但应用程序异步获取数据,因此实际上该属性具有未定义的值,然后它具有真实的数据:

class SomeClass {
    a: ISomeData;

    constructor() {
        getDataAsync().then((res: ISomeData) => this.a = res);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这a: ISomeData是不正确的。一定是a: ISomeData | undefined。(如果this.a = someData在构造函数中同步设置,那就是正确的)是否有 tslint 规则用于检查类属性没有数据并且必须具有未定义的类型?

Dan*_*iel 6

默认情况下,您分配的任何类型都可以采用值 undefined 和 null 以及您所做的任何类型声明。

在 TypeScript 配置文件 ( tsconfig.json) 中,您可以将StrictNullChecks编译器选项设置为 true。

{
  "compilerOptions": {
    "strictNullChecks": true
  }
}
Run Code Online (Sandbox Code Playgroud)

来自编译器选项的 TypeScript 文档:

在严格的空检查模式下,空值和未定义值并不在每种类型的域中,并且只能分配给它们自己和任何(一个例外是未定义也可以分配给void)。

当您这样做时,类型为 as 的变量ISomeData只能包含该类型。

如果你想要未定义/空值,你必须像这样输入

a: ISomeData | undefined | null;
Run Code Online (Sandbox Code Playgroud)