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

TypeScript根据参数类型动态调整函数返回类型的实现问题求助

TypeScript根据参数类型动态调整函数返回类型的实现问题求助

各位好,我现在遇到一个TypeScript函数类型定义的问题,想请大家帮忙看看怎么解决。

我的需求是写一个返回类型依赖于输入参数的函数:

  • 当输入参数是undefined时,函数直接提前返回一个字符串
  • 当输入参数是已定义的数字时,只有满足特定条件才返回字符串,否则返回undefined

第一次尝试:使用条件返回类型

我首先用了条件返回类型来定义函数,代码如下:

function example<X extends number | undefined>(n: X): X extends number ? string | undefined : string {
  if (typeof n === "undefined") {
    return "Number is not defined";
  }
  if (n < 0) {
    return "No negative number allowed";
  }
  if (n > 100) {
    return "Number is too big";
  }
  return undefined;
}

但这段代码里最后一行的return undefined;触发了类型错误:

Type 'undefined' is not assignable to type 'X extends number ? string | undefined : string'

我本来以为这个条件返回类型能让编译器识别到:只有当参数是数字类型时才会走到这个返回分支,这里返回undefined是符合string | undefined类型的,但实际还是报错了。

第二次尝试:使用函数重载

之后我又尝试用函数重载的方式实现,结果遇到了另一个错误:This overload signature is not compatible with its implementation signature,代码如下:

function example(n: undefined): string;
function example(n: number): string | undefined {
  if (typeof n === "undefined") {
    return "Number is not defined";
  }
  if (n < 0) {
    return "No negative number allowed";
  }
  if (n > 100) {
    return "Number is too big";
  }
  return undefined;
}

想请教大家,这两种写法分别哪里出了问题?有没有正确的实现方式能满足我的需求呢?


备注:内容来源于stack exchange,提问作者Ian678

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:53:07