如何用自定义Head类型约束TypeScript中head函数的返回值?
用自定义Head类型约束head函数的返回值
完全可以实现,只需要把head函数改成泛型函数,让TypeScript能推断出传入数组的具体类型,再用你定义的Head类型约束返回值即可。
修改后的完整代码如下:
type Head<T extends unknown[]> = T extends [infer First, ...any[]] ? First : never; function head<T extends unknown[]>(arr: T): Head<T> { const [first, ...rest] = arr; return first; }
测试示例
// 正确,返回值类型被推断为1的字面量类型 const num = head([1,2,3]); num = 1; // 正常 num = 2; // 报错:类型“2”不能赋值给类型“1” // 返回值类型被推断为string const str = head(['a', 'b', 'c']); str = 'a'; // 正常 // 空数组传入时,返回值类型为never const empty = head([]); empty = 1; // 报错:类型“number”不能赋值给类型“never”
原理说明
通过给函数添加泛型参数T(约束为unknown[]),TypeScript会根据你传入的数组自动推断出T的具体类型,再通过Head<T>提取出数组的第一个元素类型,从而在编译阶段严格约束函数的返回值类型,完全符合你想要的开发阶段类型检查需求。
内容的提问来源于stack exchange,提问作者frankfullstack
相关产品推荐
相关产品推荐

