You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中通过枚举键取值的高效方案(替代Switch语句)

问题描述

我在TypeScript中定义了如下枚举对象(注:原代码存在语法错误,已修正):

export enum AllGroup {
  GROUP_AUS = 'A',
  GROUP_IN = 'B'
}

当传入键值(如const input = 'GROUP_IN')时,期望得到对应值B。目前我使用Switch语句实现,但枚举过长时该方式繁琐,请问是否有更优方法?

我当前的实现代码:

const renderValue = (input: string): JSX.Element => {
  switch (input) {
    case AllGroup.GROUP_AUS:
      return <>A</>;
    case AllGroup.GROUP_IN:
      return <>B</>;
    default:
      return <div></div>;
  }
};
解决方案

方法1:直接利用枚举的索引访问

TypeScript的字符串枚举本身支持通过键名获取对应值,直接用索引访问就能大幅简化代码:

const renderValue = (input: string): JSX.Element => {
  // 类型断言确保input是枚举的合法键
  const value = AllGroup[input as keyof typeof AllGroup];
  return value ? <> {value} </> : <div></div>;
};

方法2:抽离映射对象(更易扩展)

如果后续需要给映射逻辑加额外定制,可以单独定义和枚举对应的映射对象,再通过对象访问取值:

// 定义映射对象,与枚举键值对应
const groupMap: Record<keyof typeof AllGroup, JSX.Element> = {
  GROUP_AUS: <>A</>,
  GROUP_IN: <>B</>
};

const renderValue = (input: string): JSX.Element => {
  return groupMap[input as keyof typeof AllGroup] || <div></div>;
};

方法3:类型安全的键约束

如果想避免无效输入,可以直接限定参数为枚举的合法键,编译阶段就会拦截错误:

const renderValue = (input: keyof typeof AllGroup): JSX.Element => {
  return <> {AllGroup[input]} </>;
};

这种方式下,调用renderValue时传入非枚举键会直接触发TypeScript编译报错,无需额外处理默认值(业务允许的情况下)。

内容的提问来源于stack exchange,提问作者learntocode2468

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:05:05