我定义了以下类型:
type Admin: 'ADMIN' | 'AGENT';
我有一个从本地存储中返回用户角色的函数:
return localStorage.getItem('role');
我想测试返回的项是否是上述字符串文字之一。
答案 0 :(得分:2)
编译期间会删除类型,因此您无法使用它们进行比较。您可以使用基于字符串的枚举:
enum Role {
"ADMIN",
"AGENT"
}
let role = localStorage.getItem("role");
if (role && role in Role) {
console.log("role exists");
};
答案 1 :(得分:1)
你应该创建一个类型守卫:
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
时,参数具有指定的类型。
不幸的是,如果不重复字符串并至少编写一次显式测试,就无法做到这一点,但至少你可以编写一次代码并使用它来扩展类型检查以安全地覆盖值。 / p>