首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有枚举的TypeScript条件类型

带有枚举的TypeScript条件类型
EN

Stack Overflow用户
提问于 2021-09-07 09:08:37
回答 1查看 48关注 0票数 0

我有以下TypeScript枚举:

代码语言:javascript
复制
enum UIConfigurationType {
  DisplayTableFields = "display-table-field",
  FormFields = "form-field",
  MainAttributes = "main-attribute",
  SearchAttributes = "search-attribute",
}

和这个条件类型:

代码语言:javascript
复制
type UIConfigurationEntitySuffix<T extends UIConfigurationType> =
  T extends UIConfigurationType.DisplayTableFields
    ? "display-table-fields"
    : T extends UIConfigurationType.FormFields
    ? "form-fields"
    : T extends UIConfigurationType.MainAttributes
    ? "main-attributes"
    : T extends UIConfigurationType.SearchAttributes
    ? "search-attributes"
    : never;

例如,它应该静态地返回泛型文字类型UIConfigurationType.SearchAttributes的文字类型"search-attributes" (它实际上做得很正确)。

然后我有了下面的函数,它动态地实现了由前面的条件类型定义的映射:

代码语言:javascript
复制
function getUIConfigurationEntitySuffix<T extends UIConfigurationType>(
  uiConfigurationType: T
): UIConfigurationEntitySuffix<T> {
  switch (uiConfigurationType) {
    case UIConfigurationType.DisplayTableFields:
      return "display-table-fields";
    case UIConfigurationType.FormFields:
      return "form-fields";
    case UIConfigurationType.MainAttributes:
      return "main-attributes";
    case UIConfigurationType.SearchAttributes:
      return "search-attributes";
    default:
      throw new Error(`Unknown uiConfigurationType: ${uiConfigurationType}`);
  }
}

此函数定义会导致TypeScript在每个case分支中引发错误:

TypeScript errors on getUIConfigurationEntitySuffix function

我遗漏了什么?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-09-07 09:24:01

这样啊,原来是这么回事!无论出于什么原因,TypeScript都没有推断出返回的类型就是UIConfigurationEntitySuffix<T>期望的类型,所以我必须显式地转换它们:

代码语言:javascript
复制
function getUIConfigurationEntitySuffix<T extends UIConfigurationType>(
  uiConfigurationType: T
): UIConfigurationEntitySuffix<T> {
  switch (uiConfigurationType) {
    case UIConfigurationType.DisplayTableFields:
      return "display-table-fields" as UIConfigurationEntitySuffix<T>;
    case UIConfigurationType.FormFields:
      return "form-fields" as UIConfigurationEntitySuffix<T>;
    case UIConfigurationType.MainAttributes:
      return "main-attributes" as UIConfigurationEntitySuffix<T>;
    case UIConfigurationType.SearchAttributes:
      return "search-attributes" as UIConfigurationEntitySuffix<T>;
    default:
      throw new Error(`Unknown uiConfigurationType: ${uiConfigurationType}`);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69085369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档