ts对象函数的重载怎么写?

作者站长头像
站长
· 阅读数 8
type Test = {
  o1(num:number):number;
  o1(num:number,flag:boolean):number[];
}

const OTest:Test = {
  o1(num:number):number
  o1(num:number,flag:boolean):number[]
  o1(num:number,flag:boolean){
    if(flag){
      return [num]
    }else{
      return num
    }
  }
}

这样写的话会报错ts对象函数的重载怎么写?即使写了,也会报别的错ts对象函数的重载怎么写?

因为OTest这个对象其实是传递给库的配置对象,所以须为对象的形式

如果不使用函数重载的方式,能否实现像函数重载的功能,不然如果将返回值定为联合类型,接收的时候都要断言成某种类型就很头疼。。

回复
1个回答
avatar
test
2024-06-27
type Test = {
  o1(num: number, flag?: boolean): number | number[];
};

class OTest implements Test {
  o1(num: number): number;
  o1(num: number, flag: boolean): number[];
  o1(num: number, flag?: boolean): number | number[] {
    if (flag) {
      return [num];
    } else {
      return num;
    }
  }
}

const testInstance = new OTest();
console.log(testInstance.o1(1)); // 输出: 1
console.log(testInstance.o1(1, true)); // 输出: [1]
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容