首页 > 解决方案 > typescript 指的是和 super 方法相同的类型

问题描述

假设我正在使用提供以下类的外部库:

Class A {
  ...overloads types
  doSomething(param, params) {

  }
}

我想重写该super方法并提供我的实现,但我想保留原始. (包括重载)

Class B extends A {
   doSomething(param, params) {
     // ...some logic
     super.doSomething(); 
   }
}

有办法用 Typescript 做到这一点吗?

标签: typescript

解决方案


应该可以按照您的描述正常工作:

class A {
  test() {
    return 'from class A';
  }
}

class B extends A {
  test() {
    return super.test() + ' and from class B';
  }
}

你可以在打字稿操场上玩它

要保留参数:

class A {
  test(a: number) {
    return `from class A ${a}`;
  }
}

class B extends A {
  test: A['test'] = (...args) => {
    return super.test(...args) + ' and from class B';
  }
}

如果你想在原型上使用它:

class A {
  test(param: number | string): void {
    console.log(param);
  }
}

type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never;

class B extends A {
  test(...args: ArgumentsType<A['test']>): ReturnType<A['test']> {
    return super.test(...args);
  }
}

推荐阅读