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

TypeScript条件返回类型失效:返回"yes"为何触发TSC类型错误?

问题原因与解决方案

报错原因

你当前写法里,返回类型的条件类型typeof flag extends true ? "yes" : "no"会被TypeScript直接求值,而非保留条件性。因为flag的类型是boolean,boolean extends true的判断结果为false,所以整个返回类型被固定为"no"——这就导致返回"yes"时触发类型不兼容的错误。

条件类型要实现“依赖传入参数类型”的效果,必须基于泛型参数,而非具体的基础类型(比如boolean)。

修正方案

方案1:泛型函数

将函数改为泛型,让flag的类型是受boolean约束的泛型参数,这样条件类型会根据传入的具体字面量类型(true或false)动态推断返回值类型:

const test = <T extends boolean>(flag: T): T extends true ? "yes" : "no" => {
  if (flag === true) {
    return "yes" as ReturnType<typeof test>;
  } else {
    return "no" as ReturnType<typeof test>;
  }
}

这里的类型断言是因为TypeScript的控制流分析暂时无法完全匹配泛型条件类型,需要手动辅助确认类型。

方案2:函数重载

通过重载明确指定不同参数对应的返回类型,写法更直观:

function test(flag: true): "yes";
function test(flag: false): "no";
function test(flag: boolean): "yes" | "no" {
  if (flag === true) {
    return "yes";
  } else {
    return "no";
  }
}

调用时,传入true会得到返回类型"yes",传入false会得到"no",完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:20:32