2015-12-31 6 views
7

Я пытаюсь создать экземпляр от общего типа T, например,Получить конструктор/экземпляр от общего типа в машинописном

class Factory { 
    public static generate<T>(): T { 
     return new T(); 
    } 
} 

Но поскольку T просто типа не конструктора, мы не можем сделай это.

Невозможно создать экземпляр из общего типа в TypeScript?

Я также прочитал эти статьи, но не смог найти решение.

+0

Возможный дубликат [Как создать новый объект от типа параметра в обобщенном классе в машинописи?] (http://stackoverflow.com/questions/17382143/how-to-create-a-new-object-from-type-parameter-in-generic-class-in-typescript) – Louis

ответ

10

Информация о типе используется в машинописном очищаются перед выполнением, поэтому информация о T не доступна, когда вы делаете вызов new T().

Вот почему все альтернативные решения зависят от конструктора передается, например, с this example of creating a class dynamically:

interface ParameterlessConstructor<T> { 
    new(): T; 
} 

class ExampleOne { 
    hi() { 
     alert('Hi'); 
    } 
} 

class Creator<T> { 
    constructor(private ctor: ParameterlessConstructor<T>) { 

    } 
    getNew() { 
     return new this.ctor(); 
    } 
} 

var creator = new Creator(ExampleOne); 

var example = creator.getNew(); 
example.hi();