2016-10-29 1 views
2

팩토리 함수에서 인스턴스의 유형을 추론하는 방법은 클래스의 인스턴스를 생성합니다 : factory<A>(A) :제네릭 : 클래스

class A { 
    name: string 
} 
function factory<T>(Cl): T { 
    return new Cl() 
} 
let a = factory<A>(A) 
a.name // OK 

나는에 A의 반복을 피하기 싶습니다. 제네릭 인스턴스 형식은 클래스 형식에서 유추 될 수 있어야하며 그렇지 않아야합니다.

function factory<T>(Cl: typeof T): T { // Error: Cannot find name 'T' 
    return new Cl() 
} 

이 할 수있는 방법이 있나요 :

나는이 코드를 시도? 타이프 스크립트 documentation을 바탕으로

답변

2

:

제네릭을 사용하여 타이프 라이터 공장을 만들어, 그들의 생성자 함수에 의해 클래스 유형을 참조하는 필요하다.

그래서 당신은 같은 것을 수행해야합니다 위의 코드에서

function factory<T>(Cl: { new(): T; }): T { 
    return new Cl(); 
} 

Cl해야 적어도 T 제네릭 형식을 반환 생성자를 가지고있는 유형입니다.

은 그래서 형식 유추가 작동합니다 : 당신은 컴파일러가 그것을 알고 있기 때문에 어쨌든 A의 유형을 지정할 필요가 없습니다

let a = factory(A); 
a.name; 

.