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
解决方案
使用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();
推荐阅读
- angular - 为什么 switchMap 在 Angular 拦截器(Angular 9)中不起作用
- amazon-web-services - 话语不能发送电子邮件
- javascript - 我们可以像这样将对象键分配给另一个变量吗?
- python - 列表比较算法的 Python 集与哈希表性能
- c++ - 改进基于模板的库的用例
- java - Java流减少到映射
- javascript - 如何使用选择选项单击加载 json 文件
- makefile - 生成文件中的日志包装器?
- html - 诸如 的 HTML 标签是强制性的吗?
- firebase - 如何使用谷歌表格设置firestore文档的id