2017-03-27 213 views
1
鍵入的枚舉實例

我有以下方法,其將枚舉的字符串實例爲相應的枚舉成員的對象上:在打字稿

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

它被稱爲是這樣的:

transformEnum(result, "day", DayOfWeek); 

是有什麼辦法可以輸入enumInstance變量?打字不一定是完美的,但至少有點限制它會很好。

或者我已經試過

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

但是,當我把這個像這樣:

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

我得到

[TS]類型 '的typeof星期幾' 的說法是不能分配給'DayOfWeek'類型的參數。

+0

請檢查這對你的作品:http://stackoverflow.com/questions/17380845/how-to-convert-string-to-enum-in -typescript –

+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