2016-02-26 165 views
0

我得到method expression is not of function type。用typescript 1.7.5。这是我的例子:如何使用工厂实例化通用对象

interface IEntity { 
    new(parameters:{id:number}): this; 
} 

class Repository<T extends IEntity> {​ 
    constructor(private model:T) {} 
​ 
    create():any { 
     return new this.model({id: 1}); 
    } 
} 

我怎样才能使它发挥作用?

应该是这样的:

class Model implements IEntity {} 

let r = new Repository(Model); 
let object = r.create(); 

回答

1

这应该工作。

interface IEntity { 
    id:number; 
    show(): number; 
} 

class Repository<T extends IEntity> {​ 
    ​constructor(private model: {new(id:number): T; }){} //Notice the empty constructor 

    create():T { 
     return new this.model(2); 
    } 
} 

class Model implements IEntity { 
    id:number; 

    constructor (id:number){ 
     this.id = id; 
    } 
    show():number { 
     return this.id; 
    } 
} 

let r = new Repository(Model); 
let object = r.create(); 
console.log(object.show()); 

这是@DennisJaamann和@约翰白的答案组合。

0

我相信,语法应为如下:

class Repository<T extends IEntity> {​ 
    ​constructor(){} //Notice the empty constructor 

    create():T { 
     return new T({id: 1}); 
    } 
} 

class Model implements IEntity {} 

let r = new Repository<Model>(); //Specify the specific type of IEntity <T> 
let object = r.create(); 

@see http://www.typescriptlang.org/Handbook#generics-generic-classes

干杯

+0

我收到错误:'找不到名字'T'.' – Vardius