将字符串文字作为泛型进行打字:开关中的详尽检查

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

我有以下过于简化的代码片段:

type a = 'a' | 'b';
const fn = <T extends a>(param: T): T => {
  switch(param) {
    case 'a':
      return 'a' as T;
    case 'b':
      return 'b' as T;
  }
};

我不明白,为什么编译器抱怨缺少返回,并且有没有一种方法可以解决它,这是面向未来的(例如,不添加默认情况,我想确保所有情况都得到显式处理,所以如果在未来类型会扩展,我确实希望它失败)

当我删除泛型时它起作用,但在我的场景中,返回类型在 T 上是泛型

typescript switch-statement typescript-generics string-literals
1个回答
0
投票

在默认子句中抛出错误会让打字稿高兴

type a = 'a' | 'b';
const fn = <T extends a>(param: T): T => {
  switch(param) {
    case 'a':
      return 'a' as T;
    case 'b':
      return 'b' as T;
    default:
      throw 'Invalid param'
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.