Typescript任意类mixins函数

时间:2019-01-30 17:03:25

标签: typescript mixins

在下面的示例中,我尝试定义函数 classMixin ,该函数将采用任意类,并返回扩展该任意类的新类。但是我收到一条错误消息,指出“ 类型'T'不是构造函数类型。

如何在Typescript中定义一个函数,以便在运行时创建类mixins?

class A
{
    name: string;
}

function classMixin<T extends new()=>any>(baseclass: T)
{
    return class extends baseclass
    {
        age: number;
    }
}

let c = classMixin(A);

1 个答案:

答案 0 :(得分:2)

在介绍它们的[PR]中定义的杂项非常有关构造函数的约束。它应该是T extends new(...a: any[])=>any。行为是构造函数参数将由mixin保留,这可能是您想要的:

class A
{
    name: string;
}

function classMixin<T extends new(...a: any[])=>any>(baseclass: T)
{
    return class extends baseclass
    {
        age: number;
    }
}

let c = classMixin(A);
let cc = new c();