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

如何基于已有TypeScript联合类型创建映射后的新联合类型?

TypeScript联合类型映射优化方案

问题描述

现有如下联合类型:

type UserDtoRolesType = 'U' | 'C' | 'A';

需要基于该类型创建新的联合类型,映射规则为:'U' -> 'User'、'C' -> 'Customer'、'A' -> 'Admin',最终期望得到:

type UserRolesType = 'User' | 'Customer' | 'Admin';

当前采用嵌套条件类型实现,虽能得到预期结果,但写法繁琐、维护性差:

type TRoleConverter<R> =  R extends 'U' ?
  'User' :
  R extends 'C' ?
    'Customer' :
    R extends 'A' ? 'Admin' : never;

export type TUserRole = TRoleConverter<UserDtoRolesType>;

如何避免这种硬编码的嵌套条件判断,实现更合理的类型映射?

优化方案

可以通过映射类型+索引访问的方式实现,将映射关系集中定义,结构更清晰,维护更便捷:

// 原始联合类型
type UserDtoRolesType = 'U' | 'C' | 'A';

// 定义缩写与全称的映射关系
type RoleMap = {
  'U': 'User',
  'C': 'Customer',
  'A': 'Admin'
};

// 通过索引访问生成目标联合类型
type UserRolesType = RoleMap[UserDtoRolesType];

方案优势

  • 映射关系集中管理,新增或修改角色时,只需在RoleMap中添加/修改键值对即可,无需改动类型转换逻辑
  • 代码结构简洁直观,相比嵌套条件类型更易读、易维护

内容的提问来源于stack exchange,提问作者Георгий Барсегян

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:52:45