我有一個這樣的列舉:
export enum Roles {
ADMIN, NONE;
}
我得到一個使用這個列舉的物件。物體:
export interface User {
name: string;
roles: Roles[];
}
我通過網路請求和 json 得到它。收到網路請求后,我記錄了填充良好的物件:
{ name: 'Admin', roles: Array(1) }
角色陣列是:
roles: ['ADMIN']
所以,我嘗試檢查用戶是否像這樣的管理員角色:
user.roles.includes(Roles.ADMIN);
但它總是回傳假。我也試過user.roles.indexOf(Roles.ADMIN) != -1,但結果是一樣的。
經過一番搜索,我看到多個帖子在談論Object.values(). 我嘗試用這種方法列印,或者使用includes,但我得到了相同的結果。
我能怎么做 ?
uj5u.com熱心網友回復:
enumTypeScript 默認數字列舉中的條目開始于0并自動遞增。
如果您正在使用使用字串表示的 API 或其他資料源,則需要將您的列舉實作為字串列舉
雖然字串列舉沒有自動遞增的行為,但字串列舉的好處是它們可以很好地“序列化”。換句話說,如果您正在除錯并且必須讀取數字列舉的運行時值,那么該值通常是不透明的——它本身并不能傳達任何有用的含義(盡管反向映射通常會有所幫助)。字串列舉允許您在代碼運行時提供有意義且可讀的值,而與列舉成員本身的名稱無關。
因此,對于您的代碼,您可以這樣做:
export enum Roles {
ADMIN = 'ADMIN',
NONE = 'NONE';
}
uj5u.com熱心網友回復:
默認情況下,打字稿中的列舉具有數值,因此在您的情況下'ADMIN' = 0,您user.roles.includes(Roles.ADMIN);將永遠不會回傳 true。一種選擇是將您的列舉設定為類似這樣的字串值
export enum Roles {
ADMIN = 'ADMIN',
NONE = 'NONE'
}
然后使用user.roles.includes(Roles.ADMIN);應該回傳true
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/431914.html
上一篇:假設我選擇了第一個選擇選項,它應該向我顯示第二個選擇選項的串列。我怎樣才能在角度做到這一點?
下一篇:Angular檔案上傳驗證器失敗
