2017-03-27 2 views
1
에 열거 인스턴스를 형식화

나는 물체에 대응하는 열거 형 멤버에 열거의 문자열 인스턴스를 변환 다음과 같은 방법이 있습니다는 타이프

function transformEnum<TBase>(base: TBase, member: keyof TBase, enumInstance: any) { 
    base[member] = enumInstance[base[member]]; 
} 

그것은 다음과 같이 불렀다 :

transformEnum(result, "day", DayOfWeek); 

인가 거기에 어떤 방법을 enumInstance 변수를 입력 할 수 있습니까? 타이핑은 완벽 할 필요는 없지만 적어도 어느 정도는 제한적입니다. 되어

transform<DayOfWeek>(() => result.day, (x) => { result.day = x; }, DayOfWeek); 

나는 '대해서 typeof 된 요일'유형의

[TS] 인수를 얻을 :

또는 나는

function transform<T>(get:() => T, set: (x: T) => void, enumInstance: T) { 
    set((enumInstance as any)[get()]); 
} 

을 시도했습니다하지만 지금처럼이를 호출 할 때 'DayOfWeek'유형의 매개 변수에 할당 할 수 없습니다.

+0

가 확인하시기 바랍니다 : http://stackoverflow.com/questions/17380845/how-to-convert-string-to-enum-in - typypript –

+0

@BalajiV 내 코드 샘플을 읽으면 내가하는 일을 알게 될 것이다. 질문은 변환하는 방법이 아니라 함수 매개 변수를 입력하는 방법입니다. –

답변

2
function transform<T, TKey extends keyof T>(get:() => TKey, set: (x: T[TKey]) => void, enumInstance: T) { 
    set(enumInstance[get()]); 
} 

예 :이 당신을 위해 작동하는 경우

enum DayOfWeek { 
    Monday, Tuesday, Wednesday, ... 
} 

type DayOfWeekKey = keyof typeof DayOfWeek; 

class ClassWithDay { 
    day: DayOfWeekKey | DayOfWeek; 
} 

let c = new ClassWithDay(); 
c.day = "Monday"; 
transform(() => c.day as DayOfWeekKey, v => {c.day = v;}, DayOfWeek); 
// c.day is now 0