2016-06-29 2 views
2

형식을 명시 적으로 정의한 다음 해당 인스턴스를 만들고 싶습니다. 다음 코드는 문제를 설명Typescript에서 유형의 새 인스턴스를 만드는 방법은 무엇입니까?

import * as Immutable from "immutable"; 

// this works. 
let map = new Immutable.Map<string, number>(); 

// neither works below. 
type MapType = Immutable.Map<string, number>; 
let map = new MapType(); 
let map = new MapType; 
let map = MapType(); 
+0

이 작업을 수행 할 수 없습니다. 별칭을'Immutable.Map' 부분에만 정의 할 수 있습니다 (제네릭 타입 args없이) –

답변

3

당신이 단지 컴파일 시간의 유형을 정의 할 때 MapType 같은 것은에서가 없기 때문에, 그것은 (그래서 new MapType이 작동하지 않을 수 컴파일 된 JS 파일의 일부가되지 않습니다 js).

이 작업을 수행 할 수 있습니다

let ctor = Immutable.Map; 
let map = new ctor<string, number>(); 

나이 :

let ctor: { new(): Map<string, number> } = Immutable.Map; 
let map = new ctor(); 

ctortype하지만 실제 변수가없는 두 경우 모두를, 컴파일러에 의해 제거되지 않습니다 뭔가를, 하지만 컴파일러는 이것을 번역 할 것입니다 :

let ctor: { new(): Map<string, number> } = Immutable.Map; 

다음과 같이 번역합니다 :

let ctor = Immutable.Map; 
관련 문제