从unknown到元组,再到object,number...如果你用[never]访问它们,它等同于never。那么为什么any[never]会有不同的行为呢?以下是一致的,为什么?
type test0 = number[never] // never
type test1 = object[never] // never
type test2 = string[never] // string?
type test3 = any[never] // any?
type test4 = number[][never] // number
type test5 = object[][never] // object
type test6 = string[][never] // string
type test7 = any[][never] // any
type test8 = {}[][never] // {}发布于 2019-07-09 05:45:29
我认为这是一致的。never是所有类型的子类型。因此,它可以分配给任何其他类型。因此,如果我们可以在没有编译器错误的情况下使用never进行索引:
declare let o: never;
declare let arr: any[];
arr[o] // not error, any剩下的只是什么可以被索引的问题。number和object没有索引签名,因此结果是never。string是可索引的,并且结果是一个string,所以string[never]是string。any是通用可索引的,结果是any,所以any[never]是any。
对于使用never索引的数组,就像我们上面看到的那样,这是可能的,它将给我们提供项类型,因此这些结果是一致的。
https://stackoverflow.com/questions/56942865
复制相似问题