TypeScript中如何声明指定长度的自定义类型数组?
创建长度为10的自定义元组数组(TypeScript)
已知自定义元组类型:
type tuple = [number, number]
可以通过以下几种方式实现长度为10、元素类型为tuple的数组:
1. 快速创建实例(宽松长度约束)
如果只需要创建符合类型的数组实例,不需要严格的编译期长度检查,可结合Array方法和类型断言实现:
// 用Array.from生成独立元组(避免fill的引用复用问题) const tupleArr: tuple[] = Array.from({ length: 10 }, () => [0, 0]) as tuple[]; // 或用fill(注意:所有元素会引用同一个元组对象) const tupleArrFill: tuple[] = new Array(10).fill([0, 0]) as tuple[];
2. 严格长度约束的类型定义
如果需要在类型层面强制数组长度为10,可采用以下两种方式:
方式一:利用元组重复语法(TS 4.0+)
直接定义固定长度的元组类型,或通过交叉类型约束长度:
// 显式定义10个元素的元组类型 type TupleArray10 = [tuple, tuple, tuple, tuple, tuple, tuple, tuple, tuple, tuple, tuple]; // 更简洁的交叉类型写法 type TupleArray10 = tuple[] & { length: 10 }; // 创建符合类型的实例 const strictTupleArr: TupleArray10 = Array.from({ length: 10 }, () => [0, 0]) as TupleArray10;
方式二:自定义工具类型生成固定长度数组
通过递归工具类型动态生成指定长度的数组类型:
// 工具类型:生成长度为N、元素类型为T的数组类型 type FixedLengthArray<T, N extends number, R extends T[] = []> = R['length'] extends N ? R : FixedLengthArray<T, N, [...R, T]>; // 生成长度为10的tuple数组类型 type TupleArray10 = FixedLengthArray<tuple, 10>; // 创建实例(必须传入恰好10个元素) const strictTupleArr: TupleArray10 = [ [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0] ];
内容的提问来源于stack exchange,提问作者w1atrak
相关产品推荐
相关产品推荐

