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

TypeScript基于入参的条件返回类型匹配undefined时失效如何解决

问题原因

你写的条件类型失效的核心原因是:不传参数调用func()时,TypeScript 不会自动将泛型T推断为undefined,而是会推断为unknown,unknown extends undefined的判断结果为假,自然就返回了string类型,和预期不符。

解决方案

方案1:给泛型添加默认值

给泛型T指定默认值为undefined即可对齐预期:

// 给T添加默认类型undefined
const func = <T = undefined>(arg?: T): T extends undefined ? number : string => {
    if(arg) return 's' as any
    else return 10 as any
}

let ff1 = func() // 类型为number,符合预期
let ff2 = func(123) // 类型为string,符合预期

方案2:使用函数重载(更推荐)

这种参数场景只有两种情况,用函数重载写法更直观,也不需要强转any,类型安全性更高:

function func(): number
function func<T>(arg: T): string
function func(arg?: unknown) {
    if(arg !== undefined) return 's'
    return 10
}

let ff1 = func() // number
let ff2 = func('test') // string

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:18:05