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

2024-05-13

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属性返回数字类型,为什么?


The [1] in GetLength2<[1]>不仅仅是一个数组,它是一个tuple https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types。元组是特殊类型,它定义数组每个索引处的值,并定义数组的长度。由于元组定义了长度,GetLength2得到特定的长度。如果您使用普通数组而不是元组(例如,GetLength2<number[]>),结果将是number.

虽然字符串确实有一些专门的变体可供使用(例如,模板字符串类型),但它们没有任何类似于元组的东西。方式'abc'不包括该信息length属性将返回 3。也许这是他们将来可以添加到语言中的东西,但现在还没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么数组和字符串的长度属性有不同的返回类型? 的相关文章

随机推荐