约束到不同类的TypeScript混合

约束到不同类的TypeScript混合,typescript,mixins,Typescript,Mixins,我想构建一个mixin并将其应用于不同的类(在本例中为“Sprite”和“Graphics”) 第三行不起作用: function Animated<T extends Constructor<Sprite> | Constructor<Graphics>>(Base: T) { 已设置动画的函数(基:T){ TypeScript抱怨“T不是构造函数” 从“pixi.js”导入{Sprite,纹理,容器,图形}; 类型构造函数=new(…参数:any[])

我想构建一个mixin并将其应用于不同的类(在本例中为“Sprite”和“Graphics”)

第三行不起作用:

function Animated<T extends Constructor<Sprite> | Constructor<Graphics>>(Base: T) {
已设置动画的函数(基:T){
TypeScript抱怨“T不是构造函数”

从“pixi.js”导入{Sprite,纹理,容器,图形};
类型构造函数=new(…参数:any[])=>T;
已设置动画的函数(基:T){
返回类扩展了基{
构造函数(…参数){
超级(…args);
}
制作动画(){
console.log('animit');
}
}
}
导出类AnimatedSprite扩展动画(Sprite){
构造器(纹理?:纹理){
超级(纹理);
}
}
导出类AnimatedContainer扩展动画(图形){
构造函数(nativeLines?:布尔值){
超级(nativeLines);
}
}
好的,找到了解决方案:

export interface IAnimated {
    animate():void;
}

export const AnimatedSprite: Constructor<IAnimated> & typeof Sprite = <any>Animated(Sprite);
export const AnimatedGraphics: Constructor<IAnimated> & typeof Graphics = <any>Animated(Graphics);
export interface IAnimated {
    animate():void;
}

export const AnimatedSprite: Constructor<IAnimated> & typeof Sprite = <any>Animated(Sprite);
export const AnimatedGraphics: Constructor<IAnimated> & typeof Graphics = <any>Animated(Graphics);
let s = new AnimatedSprite(someTexture); // has type "Sprite" and also interface IAnimated
let g = new AnimatedGraphics(false); // has type "Graphics" and also interface IAnimated