我需要为外部库编写定义文件。我使用接口合并来扩充类,并且在某些情况下,库类的字段与实例本身的类型相同。演示代码:
// Augmentation
declare global {
interface Class<T = any> {
doesntInfer: T;
infersFine(this: T): T;
}
class Class {}
}
但是当我尝试使用它时,方法返回类型可以正确推断,但是字段仍然是typeof任何类型:
public test(arg: Class) {
arg.infersFine().infersFine().infersFine(); // works, infersFine() return type is Class
arg.doesntInfer.; // doesn't work, type == any
}
如果没有接口合并,我只需这样做:
class Class {
public doesntInfer: this;
public infersFine(): this;
}
但是我不能在接口声明中使用this
。我也不想简单地使用Class
而不是T
,因为我希望能够使用继承。
甚至有可能吗?
P.S。我进行接口合并,因为声明分为两个文件: 1)附有类别和出口声明的环境文件 2)模块化d.ts(使用其他库的导入),其中声明了增强接口。
答案 0 :(得分:0)
正如Titian Cernicova-Dragomir所指出的,您实际上可以在界面中使用this
,所以
interface Class {
doesntInfer: this;
infersFine(): this;
}
按预期工作。