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



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

为什么编译器抱怨第 11 行:当我在第 10 行显式检查此对象时Object is possible undefined

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

最新更新