我正在尝试将TypeScript类型添加到第三方JavaScript库中。大多数类方法都采用同一类的另一个实例并返回一个新实例,但是它们也将接受相同的重载构造函数参数来代替该类的实际实例。我试图避免为类的许多方法中的每个方法编写相同的重载签名,但是我不确定如何在我的.d.ts
文件中执行此操作。
例如,我可以像这样写出每个人……
class Foo {
constructor(x: number);
constructor(x: number, y: number);
constructor({ x: number, y: number });
Fizz(foo: Foo): Foo;
Fizz(x: number): Foo;
Fizz(x: number, y: number): Foo;
Fizz({ x: number, y: number }): Foo;
Buzz(foo: Foo): Foo;
Buzz(x: number): Foo;
Buzz(x: number, y: number): Foo;
Buzz({ x: number, y: number }): Foo;
// etc... for several methods
}
但是最好做类似...
class Foo {
constructor(x: number);
constructor(x: number, y: number);
constructor({ x: number, y: number });
// I'd like some sort of syntax like...
Fizz(constructor()): Foo;
Buzz(constructor()): Foo;
}
我可以轻松地声明和重用重载的方法签名吗?
答案 0 :(得分:1)
您可以很容易地合并成员函数的签名:
// Consolidate the signatures
type CreatesFoo = {
(foo: Foo): Foo;
(x: number): Foo;
(x: number, y: number): Foo;
(obj: { x: number, y: number }): Foo;
}
class Foo {
constructor(x: number);
constructor(x: number, y: number);
constructor(obj: { x: number, y: number });
constructor(...args:any[]) {}
Fizz: CreatesFoo = (): any => {
}
Buzz: CreatesFoo= (): any => {
}
// etc... for several methods
}
但是,构造函数无法合并到相同的签名中。最简单的方法就是像我一样将其列出