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

如何通过判断类型是否为undefined或特定值确定函数返回类型?

实现参数可选时返回不同类型的函数bar

需求是让bar()返回string类型,bar(10)返回number类型,这个逻辑完全可以实现,下面提供两种可靠的实现方案:

方式一:使用函数重载(推荐)

函数重载是TypeScript处理这类多返回类型场景最直观的方式,可读性高且无需额外类型断言:

function bar(): string;
function bar<T>(baz: T): number;
function bar(baz?: unknown) {
    if (baz === undefined) {
        return '42';
    }
    return 42;
}

// 类型验证
const strResult = bar(); // strResult 类型为 string
const numResult = bar(10); // numResult 类型为 number

方式二:优化泛型条件类型写法

你提供的代码思路是可行的,但需要调整泛型默认值并补充类型断言——因为TypeScript编译器无法自动将分支返回值与条件类型做匹配:

function bar<T = undefined>(baz?: T): T extends undefined ? string : number {
    if (baz === undefined) {
        return '42' as any;
    }
    return 42 as any;
}

// 类型验证
const str = bar(); // str 类型为 string
const num = bar(10); // num 类型为 number

原代码的问题说明

你给出的代码中泛型T没有设置默认值,当不传参数时T会被推断为undefined | void,虽然不影响实际运行结果,但类型定义不够严谨;另外编译器无法自动识别分支返回值符合条件类型的约束,所以需要添加类型断言才能通过编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:32:08