我正在尝试使用该--strict选项,tsc但我遇到了以下"奇怪"的情况,我似乎并不理解.
如果我写:
function testStrict(input: {query?: {[prop: string]: string}}) {
if (input.query) {
Object.keys(input.query).forEach(key => {
input.query[key];
})
}
return input;
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨:
test.ts(5,9):错误TS2532:对象可能是"未定义的".
(违规行是input.query[key];)
我不明白的是,我已经在函数的第一行用if guard检查了undefined if (input.query),为什么编译器认为它可能是未定义的?
我通过在对象访问之前添加另一个相同的防护来修复此问题,例如:
function testStrict(input: {query?: {[prop: string]: string}}) {
if (input.query) {
Object.keys(input.query).forEach(key => {
if (input.query) {
input.query[key];
}
})
}
return input;
}
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么需要另一条相同的线.