我在TypeScript中有以下代码:
type NameValue = { name: string; value: string };
type MixedStuff = NameValue | string;
function stripTwoChars(stuffs: MixedStuff[]): string {
let stuffZero = stuffs[0];
return (typeof stuffZero === "string" ?
stuffZero.slice(0, 2) :
stuffZero.name.slice(0, 2)); // This works fine
return (typeof stuffs[0] === "string" ?
stuffs[0].slice(0, 2) : // Here error: no slice on NameValue
stuffs[0].name.slice(0, 2)); // Here error: no name on string
}
因此,正如您在函数中看到的那样,首先将第一个列表项保存在变量中,然后对它进行typeof检查,这很好。
但是,如果我直接在第一个列表项上执行typeof,则类型检查将不起作用。
这是一个错误还是为什么应该这样?
答案 0 :(得分:1)
是的,这是设计使然,考虑但拒绝了数组访问表达式的类型保护。查看讨论here
由于性能原因而拒绝。由于应该几乎总是可以写
const j = list[i]
来代替,所以这应该不会太麻烦。