繁体   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