我收到TS错误:
TypeScript错误:类型'undefined'不能用作索引类型。 TS2538
对于此简单功能(根据提供的索引从数组中获取对象):
const myArr: Array<object> = [{name: 'John'}, {name: 'Tom'}]
function getData(index?: number) {
const isIndex : boolean = typeof index !== 'undefined';
return isIndex ? myArr[index] : {};
}
对我来说更神秘的是,当我将其更改为:
function getData(index?: number) {
return typeof index !== 'undefined' ? myArr[index] : {};
}
一切都像魅力一样-为什么?
答案 0 :(得分:0)
由于代码流中存在某种间接性,因此Typescript将不会按照我们的预期进行代码分析。因此,这是用户定义类型防护进入救援的地方。
function isUndefined(index: any): index is boolean {
return typeof index === "undefined";
}
function getData(index?: number) {
return isUndefined(index) ? myArr[index] : {};
}
由于index
在getData函数中是可选的,因此它可能是undefined
,因此您的第二种方法有效。
答案 1 :(得分:0)
类型保护不能与中间变量一起使用。您必须直接测试变量:
function getData(index?: number) {
return index !== undefined ? myArr[index] : {};
}
或者:
function getData(index?: number) {
if (index === undefined)
return {};
return myArr[index]
}
另请参阅:documentation from the handbook on type guards。
注意:typeof index !== 'undefined'
现在不是必需的:ES2015/2016 way of 'typeof varName === 'undefined`?