打字稿:typeof签入列表项不起作用

时间:2018-06-21 12:48:51

标签: typescript

我在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,则类型检查将不起作用。

这是一个错误还是为什么应该这样?

1 个答案:

答案 0 :(得分:1)

是的,这是设计使然,考虑但拒绝了数组访问表达式的类型保护。查看讨论here

  

由于性能原因而拒绝。由于应该几乎总是可以写const j = list[i]来代替,所以这应该不会太麻烦。