首页 > 解决方案 > 打字稿:如何重新定义类的静态方法签名

问题描述

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


标签: typescript

解决方案


使用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();

推荐阅读