打字稿严格模式下可能未定义的数组引用

时间:2019-02-05 20:44:19

标签: arrays typescript types undefined

在工作中,我们使用Typescript和严格的null检查帮助来捕获由null / undefined变量引起的异常。但是,我们最近遇到了Typescript似乎错过的错误。下面的代码对此进行了演示:

interface IMyObj {
    foo: string;
}
const myArr: IMyObj[] = [];
const myObjProp = myArr[0].foo;
console.log(myObjProp);

Typescript会毫无保留地进行编译,但是运行时显然会引发类型错误:

Uncaught TypeError: Cannot read property 'foo' of undefined

我们当然可以在代码库中将所有数组类型定义为(IMyObj | undefined)[]而不是IMyObj[],但这似乎也很容易出错,因为很容易错过一种。

有什么方法可以获取Typescript来检测诸如myArr[0]之类的未定义引用?

2 个答案:

答案 0 :(得分:1)

您可以添加此选项

"noUncheckedIndexedAccess": true,  /* Include 'undefined' in index signature results */

进入 tsconfigfile.json"compilerOptions" 对象以捕获依赖于未定义数组项的错误。

答案 1 :(得分:0)

  

有什么方法可以获取Typescript来检测可能未定义的引用,例如myArr [0]?

否,它不太可能在TypeScript中实现,请参见this proposal的讨论。另请参见these issues