제네릭의 타입 어노테이션에 클래스 타입을 받기 위해서는 클래스의 생성자 함수 타입을 타입 어노테이션으로 받으면 됩니다. 즉, 다음처럼요.
function create<Type>(c: { new (): Type }): Type {
return new c();
}
위의 함수는 클래스 타입을 제네릭 타입으로 받아 해당 클래스의 객체를 생성해줍니다. 예제 코드는 다음과 같습니다.
class Animal {
constructor(name: string) {
// ...
}
}
function createInstance<A>(c: new (name: string) => A, name: string): A {
return new c(name);
}
createInstance(Animal, "tiger");
Animal의 생성자가 string 타입의 인자를 받는다는 점에 고려하여 클래스의 생성자 함수 타입을 정의하고 있고 있습니다.
