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

如何在TypeScript中使用enum枚举值限制变量的可选取值

TypeScript 枚举值限制变量取值范围实现方案

这个需求完全可以实现,你示例中的两种写法本身就是合法的用法,不过数字枚举存在默认的宽松校验问题,需要额外注意。

标准原生枚举用法

你定义的enum FormType本身就可以直接作为类型使用:

enum FormType {
   Create = 1,
   Update = 2
}
// 写法1:直接用枚举作为类型,变量默认只能取枚举内的取值
const a: FormType = FormType.Create 
// 写法2:显式声明为枚举成员的联合类型,适用于仅允许部分枚举值的场景
const b: FormType.Create | FormType.Update = FormType.Create

注意:数字枚举默认支持反向映射,TypeScript 出于历史兼容原因,默认允许给数字枚举类型的变量赋值任意数字,比如const a: FormType = 3默认不会报错,如果你需要严格限制只能用枚举内定义的值,可以用下面两种方案。

严格限制取值的实现方案

  • 方案1:改用字符串枚举
    字符串枚举没有反向映射逻辑,天然支持严格校验,非枚举定义的值赋值会直接触发类型错误:

    enum FormType {
       Create = '1',
       Update = '2'
    }
    const a: FormType = '3' // 类型报错:不能将类型“"3"”分配给类型“FormType”
    
  • 方案2:用as const常量对象模拟数字枚举
    如果必须使用数字类型的枚举值,可以用常量对象替代原生枚举,同时提取值类型做严格校验:

    // 定义常量枚举对象
    const FormType = {
      Create: 1,
      Update: 2
    } as const
    // 提取枚举值的联合类型
    type FormType = typeof FormType[keyof typeof FormType]
    
    const a: FormType = 3 // 类型报错:不能将类型“3”分配给类型“FormType”
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:06