我想将字符串缩小为字符串文字联合。换句话说,我想检查字符串是否是我的文字联合的可能值之一,以便这将起作用(如果运算符 couldbe
存在)。
type lit = "A" | "B" | "C";
let uni: lit;
let str = "B";
if(str couldbe lit){
uni = str;
} else {
doSomething(str);
}
我怎样才能做到这一点?
我尝试使用
if (str instanceof lit)
,但这似乎不起作用。使用 keyof
迭代字符串联合也不起作用,因为允许的值本身不是键。一种方法是使用
switch
每个可能的值都有一个案例,但如果 lit
可能会导致细微的错误s 允许值更改。
最佳答案
您可以使用 User-Defined Type Guards .
type lit = "A" | "B" | "C";
let uni: lit;
let str = "B";
function isLit(str: string): str is lit {
return str == "A" || str == "B" || str == "C";
}
function doSomething(str: string) {
}
if (isLit(str)) {
uni = str;
}
else {
doSomething(str);
}
地址:
为避免重复编辑,
class
可用于编译时和运行时。现在您只需编辑一处即可。class Lit {
constructor(public A = 0, public B = 0, public C = 0) {}
}
type lit = keyof Lit;
let uni: lit;
function isLit(str: string): str is lit {
let lit = new Lit();
return (str in lit) ? true : false;
}
关于string - 将字符串缩小为字符串文字联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004643/