有人可以解释一下
switch (true)
typescript 5.3 中的缩小范围吗?
引自https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-3.html#switch-true-narrowing,我只是不明白这如何改进了缩小类型旧方式的 switch 语句。
写起来
switch (true)
也感觉挺奇怪的。
function f(x: unknown) {
switch (true) {
case typeof x === "string":
// 'x' is a 'string' here
console.log(x.toUpperCase());
// falls through...
case Array.isArray(x):
// 'x' is a 'string | any[]' here.
console.log(x.length);
// falls through...
default:
// 'x' is 'unknown' here.
// ...
}
}
如果没有
switch (true)
我可以像这样编写我的代码,所以在switch case上可能会遇到一个优势,即使是这样,它也可以通过编写switch (true)
来抵消(在我看来)
function f(x: unknown) {
if (typeof x === "string") {
// 'x' is a 'string' here
console.log(x.toUpperCase());
console.log(x.length);
}
else if (case Array.isArray(x)) {
console.log(x.length);
}
else {
// 'x' is 'unknown' here.
// ...
}
}
一句话来说,
switch
的说法就像是在问以下哪种情况符合我的条件?在您的示例中,这意味着“以下哪种情况等于 true
?”。
尝试思考一个广义的
switch
陈述:
switch (a) {
case x:
break;
case y:
break;
default:
}
本质上,这会将语句
a
与每个 case
进行比较。即:a
等于x
吗?如果不是,a
等于y
吗?如果没有,请检查下一个案例。
最后,如果将整个
switch
语句重写为等效的 if - elseif - elseif - elseif - else
语句,代码可能会更容易推理。