14

I am trying to create instance from generic type T for example,

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

But since T is just a type not constructor, we can't do that.

Is it impossible to create an instance from a generic type in TypeScript?

I'v also read these articles but could not found a solution.

1

1 Answer 1

15

The type information used in TypeScript is erased before runtime, so the information about T is not available when you make the call to new T().

That's why all of the alternate solutions depend upon the constructor being passed, such as with 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();
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.