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

如何在TypeScript对象中实现函数的条件类型定义?

在TypeScript对象中实现函数重载的正确方式

你之前的写法错误在于,TypeScript不允许在对象字面量内部直接写函数重载的声明,必须先通过类型注解(接口或直接写类型)来定义重载规则,再让对象实现这个类型。以下是两种正确的实现方式:

方式一:使用接口定义重载类型

先定义一个包含函数重载签名的接口,再让对象实现该接口:

interface MyObj {
  myfunc(input: string): number;
  myfunc(input: number): string;
}

const obj: MyObj = {
  myfunc(input: string | number): string | number {
    // 通过类型守卫处理不同参数类型
    if (typeof input === 'string') {
      return input.length; // 符合string输入返回number的重载
    } else {
      return input.toString(); // 符合number输入返回string的重载
    }
  }
};

方式二:直接在变量类型注解中定义重载

不需要单独声明接口,直接在变量的类型注解里写重载签名:

const obj: {
  myfunc(input: string): number;
  myfunc(input: number): string;
} = {
  myfunc(input: string | number): string | number {
    if (typeof input === 'string') {
      return input.length;
    } else {
      return input.toString();
    }
  }
};

关键注意点

  • 实现函数的参数类型必须覆盖所有重载的参数类型(这里用string | number联合类型)
  • 实现函数的返回值类型要覆盖所有重载的返回值类型(string | number)
  • 必须在函数内部通过类型守卫(比如typeof判断)确保不同输入对应正确的返回值,这样TypeScript才能正确推导重载的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:15:37