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

如何让TypeScript更「字面化」地推断函数返回类型?

TypeScript函数返回类型推断疑问解答

先看示例代码:

function foo (param: string) {
    if (param === 'bar') {
        return {
            one: 'bar'
        }
    }

    return {
        two: 'baz'
    }
}

TypeScript推断出的返回类型是:

declare function foo(param: string): {
    one: string;
    two?: undefined;
} | {
    two: string;
    one?: undefined;
};

而非预期的:

declare function foo(param: string): {
    one: string;
} | {
    two: string;
};

原因解析

这是TypeScript类型推断的既定行为:当函数返回多个不同结构的对象组成的联合类型时,TypeScript会自动为每个联合成员补充其他分支中存在的属性键,并将这些补充的属性标记为可选且类型为undefined。

这种设计的核心目的是类型安全性:如果返回纯{one: string} | {two: string}联合类型,使用者可能直接访问foo().one或foo().two而不做存在性检查,运行时会因属性不存在抛出错误。补充可选undefined的类型后,TypeScript会强制你在访问这些属性前做空值检查,避免潜在的运行时问题。

这种行为和普通函数/箭头函数无关,是TypeScript处理对象联合类型推断时的加宽逻辑,属于类型系统为安全性做出的权衡设计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:55:20