2017-06-06 119 views
1

我使用打字稿2.2.1目標枚舉ES5字符串轉換爲在打字稿

我有這樣幾個枚舉下面

enum PermissionLevel { 
    ACCOUNT_OWN, 
    ACCOUNT_OTHER, 
    USER_OWN 
} 

enum Permission { 
    ACCOUNT_CREATE, 
    USER_CREATE 
} 

我有一個輸入JSON如下

{ 
    "ACCOUNT_OWN": [ 
     "USER_CREATE", 
     "ACCOUNT_CREATE" 
    ], 
    "ACCOUNT_OTHER": [ 
     "USER_CREATE" 
    ] 
} 

我想存儲這個輸入爲Map<Permission, Array<PermissionLevel>>

以下是我的代碼

 // assume authJson is the input and is a valid JSON. 
     this.userPermissions = new Map<Permission, Array<PermissionLevel>>(); 
     for (let [level, permissions] of Object.entries(authJson)) { 
      let newLevel: PermissionLevel = <any>PermissionLevel[level]; 
      for (let perm of permissions) { 
       let newPermission: Permission = <any>Permission[perm]; 
       if (this.userPermissions.get(newPermission)) { 
        this.userPermissions.set(newPermission, this.userPermissions.get(newPermission).concat(newLevel)); 
       } else { 
        this.userPermissions.set(newPermission, new Array<PermissionLevel>().concat(newLevel)); 
       } 
      } 
     } 

     console.log(JSON.stringify(this.userPermissions)); 

最後一條語句的輸出爲空:(。不知道我在這裏做錯了什麼。

更新:我剛剛發現下面

EXCEPTION: Uncaught (in promise): ReferenceError: PermissionLevel is not defined 

有運行時錯誤行這裏是一個TS小提琴 - 在JavaScript https://jsfiddle.net/hrwyc6zv/1/

+0

你能分享你生成的JS代碼? – amiramw

+1

只能使用點符號訪問枚舉值。枚舉在運行時作爲對象生成。但是這個名字不是你TS代碼中的名字。它被生成。 – amiramw

+0

@amiramw真的,我忘了那 – Hydro

回答

2

Map對象是不是一個JSON。因此JSON.stringify不顯示其實際內容。

小試在Firefox:

var x = new Map() 
x.set('a','b') 
-> Map { a: "b" } 
JSON.stringify(x) 
-> "{}" 
+0

我更新了我的帖子,發現一個錯誤,我看到控制檯.. – TechCrunch

+0

你說的是正確的。我在地圖上用字符串來調試它是錯誤的。 – TechCrunch