解释 typescript 5.3 中的 switch (true) 缩小

问题描述 投票:0回答:1

有人可以解释一下

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.
          // ...
    }
}
typescript switch-statement
1个回答
0
投票

一句话来说,

switch
的说法就像是在问以下哪种情况符合我的条件?在您的示例中,这意味着“以下哪种情况等于
true
?”。

尝试思考一个广义的

switch
陈述:

switch (a) {
  case x:
    break;

  case y:
    break;

  default:
}

本质上,这会将语句

a
与每个
case
进行比较。即:
a
等于
x
吗?如果不是,
a
等于
y
吗?如果没有,请检查下一个案例。

最后,如果将整个

switch
语句重写为等效的
if - elseif - elseif - elseif - else
语句,代码可能会更容易推理。

© www.soinside.com 2019 - 2024. All rights reserved.