TypeScript中string[]与非定长字符串元组的区别是什么?
TypeScript非定长元组与普通数组的类型差异
1. [string, ...string[]] 与 string[] 的差异
二者的合法赋值范围存在本质区别:
[string, ...string[]]是至少包含1个字符串元素的非定长元组,空数组无法赋值给该类型,如下代码会直接抛出类型错误:
// 类型错误:目标类型要求至少1个元素,源类型长度为0 const empty: [string, ...string[]] = [];
- 普通
string[]类型对数组长度没有下限限制,允许空数组、任意长度的字符串集合。@type-challenges/utils中的Equal工具会严格校验两种类型的所有兼容性场景,只要存在一种情况可以赋值给A但不能赋值给B,就会返回false,因此这里判断结果为false。
2. [...string[]] 与 string[] 等价的底层逻辑
当元组定义中没有前置固定元素、仅包含rest展开的数组类型时,TypeScript类型系统会将该元组类型与对应普通数组类型做等价处理:
[...string[]]允许空数组赋值,也支持任意长度的字符串数组,赋值范围与string[]完全一致,没有任何属性或兼容性差异,因此Equal判断返回true。
内容的提问来源于stack exchange,提问作者aztack
相关产品推荐
相关产品推荐

