我在打字稿中有以下代码:
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编辑器!
答案 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()
打字稿会引发编译时错误。