我使用打字稿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/
你能分享你生成的JS代碼? – amiramw
只能使用點符號訪問枚舉值。枚舉在運行時作爲對象生成。但是這個名字不是你TS代碼中的名字。它被生成。 – amiramw
@amiramw真的,我忘了那 – Hydro