例如,
type A = Array<string>[never]; // A is string
Run Code Online (Sandbox Code Playgroud)
never这里怎么理解呢?例如,我们可以any在这里使用吗?如果有的话有什么区别?
一般T[K]是索引类型访问。哪里K需要是 的可能密钥T。Array<string>[never]索引类型访问也是如此,其中TisArray<string>和Kis never。
要理解为什么Array<string>[never]有效,让我们首先看看什么可以索引,什么不能索引Array<string>:
string( Array<string>[string]is an error) 这是因为Array没有索引签名,因此不允许使用随机字符串进行索引。string您可以使用表示成员的特定文字类型进行索引Array(Array<string>['map']出厂时)number,就像Array使用 for 进行索引签名一样number(例如:Array<string>[number]is string)0。这里TS会寻找一个可以与数字文字类型匹配的索引签名,并且它会找到数字索引签名。它将匹配此索引签名,因为0可分配给number. 所以Array<string>[0]将会是string那么为什么我们可以用 来索引never呢?根据定义, Wellnever是任何其他类型的子类型(即,它可分配给任何其他类型)。这意味着也是 ( ex ) 的子类型,并且可分配给( ex )。由于是 的子类型,因此数字签名可以用于索引,就像它可以用于 一样。这就是为什么决心nevernumbernevernumbernever0Array<string>[never]string