为什么我在打字稿中没有收到有关StrictNullChecks的警告

时间:2018-12-12 10:03:16

标签: javascript typescript webstorm

我在打字稿中有以下代码:

interface Member {
    name: string,
    age?: number
}

class Person implements Member {
    name: string;
    constructor(name: string ){
        this.name=name;
    }
}

function bar(person: Member) {
    return "Hello, " + person.name + " " + person.age;
}

let person = new Person("John");
console.log(bar(person));

当我声明person.age时,我应该在栏函数内得到对象可能为'undefined'警告,因为不是每个会员都可以年龄。

我的打字稿配置如下:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "sourceMap": true,
    "strictNullChecks": true,
    "outDir": "./built"
  },
  "include": [
    "./src/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

有人知道为什么这对我不起作用吗?我正在使用WebStorm编辑器!

2 个答案:

答案 0 :(得分:2)

在tsconfig.json中打开"strict": true,以启用此警告。

或者,如果您不想要所有严格的选择,则:

"strictNullChecks": true,
"strictPropertyInitialization": true,

有关更多信息,请参见documentation

--strictNullCheck

  

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

--strictPropertyInitialization

  

确保在构造函数中初始化未定义的类属性。此选项要求启用--strictNullChecks才能生效。

第二个是您想要的(但需要strictNullChecks才能工作)

顺便说一句,就像@jayasai amerineni提到的那样,您的示例不应触发此警告。

答案 1 :(得分:1)

strictNullChecks检查对属性执行的所有操作是否导致非空值。但是在bar函数中,它仅打印person.age,无论它为null还是未定义。如果您说person.age.toString()打字稿会引发编译时错误。