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