从子类泛型类型推断的打字稿混合函数



以下是我目前遇到的问题的一个例子。 我正在尝试编写一个 mixin,它正确地推断和反映从提供给 mixin 的类的子类中的泛型类型。

abstract class A<T = {}> {
public abstract init(): T;
}
interface IB {
something: string;
}
class B extends A<IB> {
public init(): IB {
return null;
}
}
type ConstructorOf<T = {}> = new (...args: any[]) => T;
function ApplyC<T extends ConstructorOf<A>>(base: T) {
abstract class C extends base {
}
return C;
}
class D extends ApplyC(B) {
constructor() {
super();
// this.init()
}
}

在我写this.init()的地方,智能告诉我我对init()有超载,一个是init(): {},另一个是init(): IB,问题是我不希望出现过载,我只想出现 IB

。我需要在 mixin 中以某种方式推断出A<T = {}>中的T,并将其从提供的base: T传递给ConstructorOf<A>

你真的需要限制ApplyC函数只接收A的子类吗? 如果没有,您可以将A替换为any,例如:

function ApplyC<T extends ConstructorOf<any>>(base: T) {

然后D.init()只会返回IB,没有别的。

相关内容

  • 没有找到相关文章