TypeScript:类方法重载中的“重载签名与函数实现不兼容”

7fhtutme  于 2023-02-10  发布在  TypeScript
关注(0)|答案(1)|浏览(459)

TypeScript编译器报告"This overload signature is not compatible with its implementation signature."存在以下任何重载:

export class FullId {
  // other stuff

  static parse(toParse: string): FullId;
  static parse(toParse: string, withIdType: 'U' | 'S' | 'O' | 'T'): FullId;
  static parse(
    toParse: string,
    withIdType: 'U' | 'S' | 'O' | 'T' | undefined,
    withEntityType: string | undefined
  ): FullId;

  static parse(
    toParse: string,
    withIdType: 'U' | 'S' | 'O' | 'T' | undefined,
    withEntityType: string | undefined
  ): FullId {
    // my implementation
   }
}

它基本上是一个可以用一个、两个或三个参数调用的方法,我真的不明白问题是什么:我创建了与实现不同的重载,在实现中除了第一个参数之外的任何参数都是可选的,删除static修饰符并没有改变任何东西。

bmp9r5qi

bmp9r5qi1#

使用问号语法将参数设置为可选

export class FullId {
  static parse(toParse: string): FullId;
  static parse(toParse: string, withIdType: 'U' | 'S' | 'O' | 'T'): FullId;
  static parse(
    toParse: string,
    withIdType: 'U' | 'S' | 'O' | 'T' | undefined,
    withEntityType: string | undefined
  ): FullId;

  static parse(
    toParse: string,
    withIdType?: 'U' | 'S' | 'O' | 'T',
    withEntityType?: string
  ): FullId {
    // ...
  }
}

由于某些原因,TS在这里没有以同样的方式处理可选参数和接受undefined的参数

相关问题