You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:59:54