从 unknown
到元组,再到对象,数字...如果您使用 [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] // {}
最佳答案
我认为这是一致的。 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
进行索引的数组是可能的,并且会为我们提供项目类型,因此这些结果是一致的。
关于typescript - `any[never]` 是 `any` 类型是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942865/