如何推断用作字段类型的实例类型(使用接口合并)?

问题描述 投票:0回答:1

我需要为外部库编写定义文件。我使用接口合并来扩充类,并且存在库类的字段与实例本身的类型相同的情况。演示代码:

// Augmentation
declare global {
    interface Class<T = any> {
        doesntInfer: T;
        infersFine(this: T): T;
    }

    class Class {}
}

但是当我尝试使用它时,方法返回类型被正确推断,但字段仍然是任何类型:

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,因为我希望能够使用继承。它甚至可能吗?

附:我进行接口合并,因为声明分为两个文件:1)具有类和导出声明的环境d.ts 2)模块化d.ts(使用从其他库导入),其中声明了扩充接口。

typescript generics interface instance type-inference
1个回答
0
投票

正如Titian Cernicova-Dragomir指出的那样,你实际上可以在接口中使用this,所以

interface Class {
    doesntInfer: this;
    infersFine(): this;
}

按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.