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

如何在参数为值或回调函数时使用TypeScript泛型

问题分析与解决方案

错误原因

你当前的代码中,当ab是函数类型时,定义的是((v: T) => T)——这要求函数的参数必须是泛型T类型,但你实际传入的是固定的string值"hello"。一旦T不是string类型(比如number、boolean等),就会出现类型不兼容的错误,因为"hello"无法匹配T的类型约束。

修正方案

首先明确允许的T类型范围,然后调整函数参数的类型定义:让函数分支接受string类型的参数(因为你固定传入"hello"),返回值为T。代码如下:

type AllowedTypes = string | number | boolean | object | Array<any> | Function;

function a<T extends AllowedTypes>(ab: T | ((v: string) => T)) {
    if (typeof ab === "function") {
        return ab("hello");
    } else {
        return ab;
    }
}

验证示例

  • 直接传入非函数值:a("world")返回string,a(456)返回number,a(true)返回boolean,均符合预期。
  • 传入函数:a((str) => str.length)返回number,a(() => ({name: "test"}))返回object,a(() => () => {})返回function,类型校验正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:23:11