Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试Typescript中的字符串文字类型_Typescript - Fatal编程技术网

测试Typescript中的字符串文字类型

测试Typescript中的字符串文字类型,typescript,Typescript,我定义了以下类型: 键入Admin:'Admin'|'AGENT' 我有一个从本地存储返回用户角色的函数: 返回localStorage.getItem'role' 我想测试返回的项是否为上述字符串文字之一。类型在编译过程中被删除,因此您无法使用它们进行比较。您可以使用基于字符串的枚举: enum Role { "ADMIN", "AGENT" } let role = localStorage.getItem("role"); if (role && rol

我定义了以下类型:

键入Admin:'Admin'|'AGENT'

我有一个从本地存储返回用户角色的函数:

返回localStorage.getItem'role'


我想测试返回的项是否为上述字符串文字之一。

类型在编译过程中被删除,因此您无法使用它们进行比较。您可以使用基于字符串的枚举:

enum Role {
    "ADMIN",
    "AGENT"
}

let role = localStorage.getItem("role");

if (role && role in Role) {
    console.log("role exists");
};

类型在编译过程中被删除,因此不能将其用于比较。您可以使用基于字符串的枚举:

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时,参数具有指定的类型


不幸的是,如果不重复字符串并至少编写一次显式测试,就无法做到这一点,但至少您可以编写一次代码并使用它扩展类型检查以安全地覆盖该值。

您应该创建一个类型保护:

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时,参数具有指定的类型


不幸的是,如果不重复字符串并至少编写一次显式测试,就无法做到这一点,但至少您可以编写一次代码并使用它扩展类型检查以安全地覆盖该值。

您无法获取类型值和运行时。为什么不使用字符串枚举?可以演示一下吗?您无法获取类型值和运行时。为什么不使用字符串枚举?可以给我看看吗?谢谢;两种答案都有效;我不知道该选哪一个!也许在性能方面?谢谢你;两种答案都有效;我不知道该选哪一个!也许在性能方面?