首页 > 解决方案 > 为什么 Typescript 无法根据枚举 switch 语句推断出正确的类型?

问题描述

enum Test {
  one,
  two,
}

const play = (n: Test) => {
  switch (n) {
    case Test.one:
      return 'hello';
    case Test.two:
      return {};

    default:
      exhaustive(n);
      throw new Error('hi');
  }
};

const b = play(Test.one);

//
console.log(b);

有人可以帮我理解为什么 Typescript 不能推断出返回类型play(Test.one)是字符串而不是对象吗?另外,如果我能做些什么来让它发挥作用,我也很想知道。

打字稿 3.9.4

将鼠标悬停在 typeof b 上会产生: 错误的推断类型

标签: typescript

解决方案


原因是每个返回值都有不同的类型,一个返回一个字符串,一个返回一个对象,一个返回一个错误。这样 linter 将选择作为对象的基类


推荐阅读