[英]Testing for String Literal Type in Typescript
我定義了以下類型:
type Admin: 'ADMIN' | 'AGENT';
我有一個從本地存儲返回用戶角色的函數:
return localStorage.getItem('role');
我想測試返回的項目是否為上述字符串文字之一。
類型在編譯過程中被刪除,因此您不能將它們用於比較。 您可以使用基於字符串的枚舉:
enum Role {
"ADMIN",
"AGENT"
}
let role = localStorage.getItem("role");
if (role && role in Role) {
console.log("role exists");
};
您應該創建一個類型保護:
function isAdmin(arg: string): arg is Admin {
return arg === 'ADMIN' || arg === 'AGENT';
}
然后在您的代碼中:
let role: string = localStorage.getItem('role');
if (isAdmin(role)) {
... here role has the type Admin ...
}
類型保護是函數的一種特殊形式,其中返回值聲明其參數的類型。 然后,編譯器知道函數返回true
,參數具有指定的類型。
不幸的是,沒有重復字符串並至少編寫一次顯式測試是不可能的,但是至少您可以編寫一次代碼,並使用它來擴展類型檢查以安全地覆蓋值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.