簡體   English   中英

測試打字稿中的字符串文字類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM