2016-07-13 6 views
2

typescript를 사용하고 있는데 문자열을 유형에 매핑하여 원하는 문자열을 기반으로 특정 유형의 인스턴스를 만들 수 있습니다. 내가 예를 들어전략 - typescript를 입력 할 문자열

Node.js를 위해 쓰고 있어요

- 난 값 "범위"는 DB에서 나는 내 수업 "RangeFilter"를 사용할 경우 얻을, 값의 경우 "size"클래스 "SizeFilter"를 사용하고 싶습니다. 그들은 모두 "IFilter"인터페이스를 상속합니다. {키 : 문자열, 값 : IFilter를}

그래서

는 그래서이

지도처럼 될 수있는 유형으로 값 사이 (사전을 만들 수)에 매핑하는 방법은 무엇입니까; RangeFilter

+0

가능한 중복 http://stackoverflow.com/questions/15338610/ typescript 클래스에 대한 동적로드 - typescript) – InferOn

+0

나는 node.js에 글을 쓸 때 윈도우 객체가 없으므로 내 객체를 검색 할 수 없다. –

+0

어쩌면 그렇게해야한다. 더 나은 인수 귀하의 질문, 미안 해요 – InferOn

답변

2

이 방법이 반환 //

반환 새로운 맵 [ "범위"].
기본적으로 클래스 MyClass의 유형은 { new(): MyClass }입니다.

은 그럼 당신은 할 수 있습니다 :

interface IFilter {} 

type FilterConstructor = { new(): IFilter }; 

class RangeFilter implements IFilter {} 

class SizeFilter implements IFilter {} 

let ctors: { [key: string]: FilterConstructor } = {}; 
ctors["range"] = RangeFilter; 
ctors["size"] = SizeFilter; 

function factory<T extends IFilter>(key: string): T { 
    let ctor = ctors[key]; 

    return ctor == null ? null : new ctor() as T; 
} 

let rangeFilter: RangeFilter = factory("range"); 

(code in playground) ([동적 (타이프 라이터에 대한 반사) 타이프 클래스를로드]의

+0

감사합니다! 많은 도움을주었습니다. –