typescript - `any[never]` 是 `any` 类型是否正确?

标签 typescript types type-systems

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

剩下的只是可以索引什么的问题。 numberobject 没有索引签名,因此结果 neverstring 是可索引的,结果是 string 所以 string[never]stringany 是普遍可索引的,结果是 any 所以 any[never]any

正如我们在上面看到的那样,对于使用 never 进行索引的数组是可能的,并且会为我们提供项目类型,因此这些结果是一致的。

关于typescript - `any[never]` 是 `any` 类型是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942865/

相关文章:

javascript - 根据 Typescript 中的值对所有 JSON 键进行分组

typescript - 为什么在这种情况下返回的总是真条件类型不进行类型检查

c++ - 为什么 C++ 中的类型可转换性不具有传递性?

scala - 对于 "Box[+T]",我可以说 "The type Box is covariant",对吗?

javascript - System.js 不显示完整的堆栈跟踪

java - 如何在 Java 中创建无类型/通用参数?

r - 为什么 R 字符向量和数字向量在某些上下文中相等?

Java - 当您拥有的只是引用类型时实例化类型 X 的对象

scala - 如果 `K >: T` 是协变或逆变,那么 `K <: T` 和 `T` 的方差是多少?

typescript - 使用 Vue 类组件、Vuex 类时出现 ESLint 错误