代码之家  ›  专栏  ›  技术社区  ›  albertjan jakaria manik

如果return语句在switch语句之外,则错误地推断出函数的返回类型

  •  0
  • albertjan jakaria manik  · 技术社区  · 6 年前

    鉴于

    const ACTION_1 = "ACTION_1";
    type ACTION_1 = "ACTION_1";
    
    const ACTION_2 = "ACTION_2";
    type ACTION_2 = "ACTION_2";
    
    type ActionTypes = 
      | ACTION_1
      | ACTION_2
    
    export type Reducer<S = any> = (
      state: S | undefined,
      action: ActionTypes
    ) => S
    

    const reducer: Reducer<boolean> = (
      state = false,
      action
    ) => {
      switch (action) {
        case ACTION_1:
           return true;
        case ACTION_2:
           return false;
        default:
      }
      return state;
    }
    

    它抱怨此函数的返回类型为 IState | undefined return state; default: return state default: 而将return语句留在底部将安抚编译器。

    对于返回类型,它甚至可以在vscode中识别出return语句是不可访问的。我理解它必须考虑到它,因为运行时它不知道switch语句是否真的是详尽无遗的。

    但即使我有默认值,它也知道返回值肯定是不可到达的,并且仍然抱怨这个函数可以返回 IState未定义 .

    state

    这是虫子吗?或者已知的限制?

    Playground Link

    0 回复  |  直到 6 年前
        1
  •  1
  •   albertjan jakaria manik    6 年前

    这在typescript 3.8版中已修复。

    推荐文章