我声明了一个Typescriptobject作为索引签名({[k:t]: v}
)。当我访问它的一个元素而没有确保返回“undefined”时,我希望typescript将其标记为潜在错误:
let obj: { [x: number]: number } = {};
console.log(obj[123].toFixed()); // <-- I expect typescript warns me that obj[123] could be undefined!
但事实并非如此,尽管每个JavaScript对象都会有一些未定义的键,这些键返回undefined。因此,为了确保我得到警告,我必须声明obj
如下:
let obj: { [x: number]: number|undefined } = {};
我的问题是:什么是 typescript 的惯用解决方案?总是加上“|“undefined”到索引签名的值?或者有没有其他方法可以确保编译器会警告我?
1条答案
按热度按时间rhfm7lfc1#
如果您希望TypeScript在使用索引签名属性值时警告您,而不首先检查
undefined
,则可以启用--noUncheckedIndexedAccess
编译器选项。这会给你预期的错误:然而,这并不是“标准”
--strict
编译器选项套件的一部分是有原因的。事实证明,这使得一些惯用的JavaScript非常烦人:编译器无法区分索引签名类型的“好”索引和“坏”索引。您的选择基本上是将编译器配置为总是不安全地假设值存在,或者总是抱怨值可能不存在。
出于这个原因,我通常会关闭
--noUncheckedIndexedaccess
,并手动将undefined
添加到您关心的类型的值的域中,就像您所做的那样:Playground链接到代码