如何用TypeScript实现基于数值变量动态定义数组长度的类型?
基于数值变量定义数组类型长度的实现方案
在TypeScript中,可以通过字面量类型、泛型结合递归条件类型实现基于数值变量定义固定长度的数组类型,具体方案如下:
核心实现代码
type StringArray<N extends number, T extends string[] = []> = T['length'] extends N ? T : StringArray<N, [...T, string]>; function func<N extends number>(n: N): StringArray<N> { return Array(n).fill('') as StringArray<N>; }
效果验证
- 调用
func(1),类型推导为[string] - 调用
func(2),类型推导为[string, string] - 调用
func(5),类型推导为[string, string, string, string, string]
关键说明
- 依赖递归条件类型:不断向数组类型中追加
string元素,直到数组长度匹配传入的数值字面量N - 泛型
N需为字面量数值类型,TypeScript才能精确推导数组长度;若传入动态变量,类型会退化为普通string[]
内容的提问来源于stack exchange,提问作者Tomasz Mularczyk
相关产品推荐
相关产品推荐

