type GetLength2<T extends any[]> = T['length']
type a = GetLength2<[1]> // 1
type GetLength3<T extends string> = T['length']
type e = GetLength3<'abc'> // number
数组的length属性返回特定值,而字符串的length特性返回数字类型,为什么?
GetLength2<[1]>
中的[1]
不仅仅是一个数组,它还是一个元组。元组是一种特殊的类型,它定义数组的每个索引处的值,还定义数组的长度。由于元组定义了长度,GetLength2
得到了特定的长度。如果使用普通数组而不是元组(例如GetLength2<number[]>
(,则结果将是number
。
虽然字符串确实有一些特殊的变体可供使用(例如,模板字符串类型(,但它们没有任何类似元组的东西。类型'abc'
不包括length
属性将返回3的信息。也许这是他们将来可以添加到语言中的东西,但现在还没有。