Array<string>[never] 中 never 会做什么?

ABO*_*BOS 1 typescript

例如,

type A = Array<string>[never]; // A is string
Run Code Online (Sandbox Code Playgroud)

never这里怎么理解呢?例如,我们可以any在这里使用吗?如果有的话有什么区别?

Tit*_*mir 5

一般T[K]索引类型访问。哪里K需要是 的可能密钥TArray<string>[never]索引类型访问也是如此,其中TisArray<string>Kis never

要理解为什么Array<string>[never]有效,让我们首先看看什么可以索引,什么不能索引Array<string>

  1. You can't index with string( Array<string>[string]is an error) 这是因为Array没有索引签名,因此不允许使用随机字符串进行索引。
  2. string您可以使用表示成员的特定文字类型进行索引ArrayArray<string>['map']出厂时)
  3. 您可以使用 进行索引number,就像Array使用 for 进行索引签名一样number(例如:Array<string>[number]is string
  4. 您可以使用数字子类型进行索引。例如,您可以使用数字文字类型进行索引0。这里TS会寻找一个可以与数字文字类型匹配的索引签名,并且它会找到数字索引签名。它将匹配此索引签名,因为0可分配给number. 所以Array<string>[0]将会是string

那么为什么我们可以用 来索引never呢?根据定义, Wellnever是任何其他类型的子类型(即,它可分配给任何其他类型)。这意味着也是 ( ex ) 的子类型,并且可分配给( ex )。由于是 的子类型,因此数字签名可以用于索引,就像它可以用于 一样。这就是为什么决心nevernumbernevernumbernever0Array<string>[never]string