2017-06-21 60 views
2

我想在typescript中提取數字枚舉的enum成員,但window [name]確實返回一個未定義的對象。在Typescript中通過字符串創建枚舉實例

export enum MyEnum {  
    MemberOne = 0, 
    MemberTwo = 1 
} 

export class ObjectUtils { 
    public static GetEnumMembers(name: string): Array<string> { 
    let enumInstance = window[name]; 

    return Object.keys(enumInstance).map((k: any) => enumInstance[k]).filter((x: any) => typeof (x) == "string"); 
    } 
} 

所以現在我稱之爲GetEnumMembers方法是這樣的:

ObjectUtils.GetEnumMembers( 「MyEnum」);

enumInstance結果未定義。

編輯: 我想要與[「MemberOne」,「MemberTwo」]返回一個字符串數組

+0

請提供一個最簡單但完整的示例。提供的代碼片段使問題得不到解答。 –

+0

你能確定無論'window [name]是什麼,它不是'undefined'? – evolutionxbox

+0

'window.MyEnum'未定義,因爲導出不存儲在'window'中。檢查TypeScript編譯器生成的JavaScript代碼。 –

回答

0
除非你自己添加這些

導出的成員將不會被添加到window。您可以重構代碼以接受枚舉本身而不是枚舉名稱:

export enum MyEnum {  
    MemberOne = 0, 
    MemberTwo = 1 
} 

// Some other file 
import { MyEnum } from "./MyEnum" 

class ObjectUtils { 
    public static GetEnumMembers(e: { 
    [key: string]: any 
    }): Array<string> { 
    return Object.keys(e).map((k: any) => e[k]).filter((x: any) => typeof (x) == "string"); 
    } 
} 

// And use it like: 
console.log(ObjectUtils.GetEnumMembers(MyEnum)); 
+1

這個想法是讓泛型函數接受字符串,因爲枚舉類型是從數據庫中提取的,所以我在編程時不知道它。 – nicknack123123

+0

@ nicknack123123您需要知道枚舉所在的位置。你可以像你在代碼中那樣用一個字符串來做到這一點,但關鍵是枚舉的位置。 – Saravana