2015-12-31 17 views
7

próbuję utworzyć instancję z uniwersalnym typem T npGet konstruktora/wystąpienie od typu rodzajowego w maszynopisie

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

Ale ponieważ T tylko typ nie konstruktor, nie możemy Zrób to.

Nie można utworzyć instancji z ogólnego typu w TypeScript?

Przeczytałem również te artykuły, ale nie znalazłem rozwiązania.

+0

Możliwy duplikat [Jak utworzyć nowy obiekt z parametrem typu w klasie rodzajowy w maszynopisie?] (http://stackoverflow.com/questions/17382143/how-to-create-a-new-object-from-type-parameter-in-generic-class-in-typescript) – Louis

Odpowiedz

10

Informacje rodzaju stosowanych w maszynopisie są usuwane przed starcie, więc informacje o T nie jest dostępna po dokonaniu wywołanie new T().

Dlatego wszystkich alternatywnych rozwiązań zależy od konstruktora są przekazywane, jak z 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(); 
Powiązane problemy