为什么数组和字符串的长度属性具有不同的返回类型


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的信息。也许这是他们将来可以添加到语言中的东西,但现在还没有。

最新更新