2016-04-22 305 views
0

我正在尝试使用具有伪类的JS库的Typescript,以及提供继承的extend()函数。我卡在如何通过不同的构造函数,以新的“类”:Typescript定义泛型构造函数

type A = (param1: string, param2: number); 
type B = (param3: number, param4: number); 

interface BaseClass { 
    extend<Constructor>(): { 
     new(); // How would I associate this function with type Constructor? 
    } 
} 

var NewClass = BaseClass.extend<A>(); 
new NewClass('Hello world', 3); // type checked against type A 

var SecondClass= BaseClass.extend<B>(); 
new SecondClass(4, 5); // type checked against type B 

我已经试过这样:

interface BaseClass { 
    extend<Constructor>(): { 
     new(): Constructor; 
    } 
} 

但是预计new NewClass()返回 A型

我已经试过这样:

interface BaseClass { 
    extend<Constructor>(): { 
     new<Constructor>(); 
    } 
} 

但是,这不会输入检查new NewClass()

将函数与类型关联的正确语法是什么?

回答

0

找出new()构造函数的解决方法。我改变了类型包括new关键字本身:

type A = { 
    new(param1: string, param2: number); 
} 

type B = { 
    new(param3: number, param4: number); 
} 

然后,我可以从extend()调用返回的构造是这样的:

interface BaseClass { 
    extend<Constructor>(): Constructor; 
}