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

TypeScript中能否根据入参类型条件设置返回值是否可为null

报错原因

TypeScript 暂时不支持在函数内部通过控制流判断,自动缩小泛型条件返回类型的推导结果,你定义的泛型条件返回类型仅能在函数被调用时生效,函数内部无法识别该条件分支对应的返回类型,因此会抛出类型不匹配错误。

解决方案

推荐使用函数重载实现需求,该方案可读性高,调用时的类型提示更清晰:

// 重载1:传入可空参数时返回可空结果
function mapGoalType(parentGoal: IParentGoal | undefined | null): MultiSelectOption | null
// 重载2:传入非可空参数时返回非可空结果
function mapGoalType(parentGoal: IParentGoal): MultiSelectOption
// 函数实现
function mapGoalType(parentGoal: IParentGoal | undefined | null): MultiSelectOption | null {
  if (!parentGoal) {
    return null; // 不会再抛出类型错误
  }
  // 其余业务逻辑省略
}

如果你不想改动现有代码结构,也可以直接对返回值添加对应类型断言解决报错:

function mapGoalType<TGoalType extends IParentGoal | undefined>(
  parentGoal: TGoalType
): null extends TGoalType ? MultiSelectOption | null : MultiSelectOption {
  if (!parentGoal) {
    // 断言返回值符合泛型条件类型定义
    return null as (null extends TGoalType ? MultiSelectOption | null : MultiSelectOption);
  }
  // 其余逻辑省略
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:27:02