编译器抱怨嵌套对象中可能未定义

时间:2018-09-21 14:02:27

标签: typescript

我有以下示例代码: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

1 个答案:

答案 0 :(得分:1)

类型保护(当您编写if (objectVar[selector])并期望类型根据检查而改变时正在使用的类型)不适用于索引访问。 thisthis问题中对此进行了记录。原因是(如@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
}