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

TypeScript泛型extends使用报错,如何实现返回类型自动推断?

TypeScript泛型条件返回类型错误修复

你遇到的错误是因为TypeScript编译器无法在函数体内部将返回值与泛型条件类型做精确匹配——虽然你定义了T extends string ? string : string[]作为返回类型,但编译阶段无法追踪泛型T的具体分支,所以没法自动确认返回值符合该条件类型。

下面提供两种可行的解决方法:

方法一:使用类型断言

直接通过类型断言告知编译器返回值符合定义的条件类型,改动最小:

console.clear()
function sayHello<T extends string | string[]>(name: T): T extends string ? string : string[] {
    if (typeof name === 'string') {
        return `Hi, ${name}!` as T extends string ? string : string[];
    } else if (Array.isArray(name)) {
        return name.map(name => `Hi, ${name}!`) as T extends string ? string : string[];
    }
    throw new Error('Invalid value');
}

sayHello('xx') // 自动推断返回类型为string
sayHello(['aa', 'bb']) // 自动推断返回类型为string[]

方法二:使用函数重载

这种方式更符合TypeScript的类型系统设计,无需断言,可读性更强:

console.clear()
// 定义重载签名,明确不同入参对应的返回类型
function sayHello(name: string): string;
function sayHello(name: string[]): string[];
// 实现函数逻辑
function sayHello(name: string | string[]): string | string[] {
    if (typeof name === 'string') {
        return `Hi, ${name}!`;
    } else if (Array.isArray(name)) {
        return name.map(name => `Hi, ${name}!`);
    }
    throw new Error('Invalid value');
}

sayHello('xx') // 自动推断返回类型为string
sayHello(['aa', 'bb']) // 自动推断返回类型为string[]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:52:30