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

TypeScript中如何让自定义枚举可赋值给基于其他枚举生成的联合类型

问题本质

这是 TypeScript 枚举的类型特性导致的逻辑问题,和配置无关。
TypeScript 中不同枚举是完全独立的类型,哪怕多个枚举的成员字面量值完全一致,类型层面也互不兼容。你定义的OptionsType是PossibleEditModes与PossibleAdditionModes两个枚举的联合类型,而OptionsEnums是独立的第三个枚举,二者类型没有关联,自然无法直接赋值。

解决方案

你可以根据自己的使用场景选择以下任意一种方案修复:

  • 方案1:删除冗余的OptionsEnums枚举
    直接使用已有的两个枚举的联合类型OptionsType,需要用到具体值时直接从PossibleAdditionModes、PossibleEditModes中读取即可,不需要额外聚合为新枚举。
  • 方案2:将OptionsEnums改为常量对象
    如果需要统一聚合所有可选值,不要用枚举定义OptionsEnums,改用as const修饰的普通常量对象,自动推导的类型会和已有枚举兼容:
    const OptionsEnums = {
      MACHINE: PossibleAdditionModes.MACHINE,
      USER: PossibleAdditionModes.USER,
      ABSTRACT: PossibleAdditionModes.ABSTRACT,
      EDIT: PossibleEditModes.EDIT,
      NULL: PossibleEditModes.NULL,
    } as const;
    
    // 甚至可以直接从该对象推导OptionsType,不用手动写联合类型
    type OptionsType = typeof OptionsEnums[keyof typeof OptionsEnums];
    
  • 方案3:强制类型转换(不推荐)
    如果一定要保留现有枚举定义,赋值时可以做两次类型转换绕过校验,这种方式牺牲了类型安全性,仅做临时妥协使用:
    const tmp = OptionsEnums.ABSTRACT as unknown as OptionsType;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:15:03