打字稿:如何重新定义类的静态方法签名

时间:2020-07-22 11:56:30

标签: typescript

我有一个实现类的外部模块some-module

export declare class Some<T> {
   ...
   static create<T>(): Some<T>;
   map<U>(x: U): Some<U>;
}

export default Some

我想为我的项目重新定义某些方法的签名,所以我这样做:

declare module 'some-module' {

  interface Some<T> {
     static create<T extends number>(): Some<T>; // this doen't have any effect
     map<U extends number>(x: U): Some<U>;// here I can redefine method
  }
}

它有效,现在some.map具有新的签名。但是我不知道如何重新定义静态方法create的签名?有可能吗?

所以我可以做:

import {Some} from 'some-module'

const some = Some.create()
some.map // <- this has new signature
Some.create // <- this has old signature


1 个答案:

答案 0 :(得分:0)

使用namespace关键字将函数合并到您的类中。

declare module 'some-module' {
  export class Some<T> {
    map<U extends number>(x: U): Some<U>;
  }

  export namespace Some {
    const create: <T extends number>() => Some<T>;
  }
}

实际上与使用静态方法相同。

用法:

import { Some } from 'some-module';

new Some();
Some.create();