我有以下示例代码:sample on typescriptlang.org(激活strictNullChecks)
1. let boolVar: number | undefined;
2.
3. if (boolVar) {
4. boolVar.toString; // all fine
5. }
6.
7. let objectVar: { [key: string]: number | undefined } = {a: 1};
8.
9. const selector = "a";
10. if (objectVar[selector]) {
11. objectVar[selector].toFixed; // Object is possible undefined? o0
12. }
当我在第10行中明确检查该对象时,为什么编译器会抱怨第11行:Object is possible undefined
?
答案 0 :(得分:1)
类型保护(当您编写if (objectVar[selector])
并期望类型根据检查而改变时正在使用的类型)不适用于索引访问。 this和this问题中对此进行了记录。原因是(如@RyanCavanaugh在对该问题的评论中所述)
由于性能原因而拒绝。由于应该几乎总是可以写const j = list [i],所以这应该不会太麻烦。
如上所述,建议使用局部变量:
let objectVar: { [key: string]: number | undefined } = {a: 1};
const selector = "a";
const objectVar_selector = objectVar[selector];
if (objectVar_selector) {
objectVar_selector.toFixed; // Object is possible undefined? o0
}