【问题标题】:Not all code paths return a value: if vs switch并非所有代码路径都返回值:if vs switch
【发布时间】:2021-05-14 22:58:53
【问题描述】:

为什么,对于下面的 sn-p,编译器对我尖叫说

并非所有代码路径都返回值

const someFunction = (e: "A" | "B") => {
    if (e == "A") return "letter-A";
    if (e == "B") return "letter-B";
}

但是当使用 switch 语句时它又回到睡眠状态?

const someFunction = (e: "A" | "B") => {
    switch (e) {
      case "A": return "letter-A"
      case "B": return "letter-B"
    }
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    因为没有适当的机制来检测一系列if 语句可能是详尽无遗的,就像switch 语句一样。 microsoft/TypeScript#21985 有一个公开的建议来实现这样的功能。如果你想看到它发生,你可能想去那里给它一个?。

    目前解决此问题的唯一方法(无需重构为 switch)是添加一个虚拟的 returnthrow 语句。如果您发现自己经常这样做,您可以编写一个辅助函数,它只接受由于不可能而缩小到never 的输入,这总是throws 和return 的结果:

    const assertNever = (x: never): never => 
      { throw new Error("Oops, unexpected value " + String(x)) };
    
    const someFunction = (e: "A" | "B"): string => {
      if (e == "A") return "letter-A";
      if (e == "B") return "letter-B";
      return assertNever(e);
    }
    

    Playground link to code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2013-10-06
      相关资源
      最近更新 更多