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

如何在TypeScript中给泛型函数参数设置identity默认值

问题原因

你的代码报错核心原因是extent的泛型参数K未设置默认类型,当省略map参数时,TypeScript 3.6无法自动将K推导为和T一致的类型,因此泛型的identity函数无法匹配到(value: T) => K的类型声明。

修正方案

你可以通过给泛型参数K设置默认值,同时调整map参数的类型兼容默认场景即可:

function identity<T>(value: T): T {
    return value;
}

// 给K添加默认类型为T
function extent<T, K = T>(
    values: T[],
    // 类型断言保证类型安全,同时兼容默认和自定义映射两种场景
    map: (value: T) => K = identity as (value: T) => K
): [K, K] | undefined {
    let min: T | undefined;
    let max: T | undefined;

    // ... 业务逻辑 ...

    return min === undefined || max === undefined ? undefined : [map(min), map(max)];
}

调用验证

  • 省略map参数,默认返回和输入元素同类型的极值对:
// 返回类型为 [number, number] | undefined
extent([1,3,5,2])
  • 传入自定义map参数做类型映射:
// 返回类型为 [string, string] | undefined
extent([1,3,5,2], v => v.toString())

说明

这里给identity添加的类型断言as (value: T) => K是完全安全的:当用户未传入map参数时,K会取默认值T,此时identity的类型和要求的参数类型完全匹配,该断言仅用来解决TypeScript 3.6对泛型函数默认值匹配的校验问题。

内容的提问来源于stack exchange,提问作者Vitaly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:45:03