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

Typescript 如何访问字符串联合类型的取值进行变量相等判断?

解决方案

你定义的TestEnum是TypeScript的字符串字面量联合类型,这类类型仅在编译阶段做类型校验,不会被编译到最终的JS运行时代码中,因此无法直接通过类似TestEnum.TEST1的形式访问对应值做运行时判断,你可以选择以下任意一种方案解决:

方案1:从运行时常量推导类型

先定义运行时可用的常量集合,再从常量反向推导TS类型,保证类型和运行时取值的一致性:

// 定义运行时可用的常量数组,as const锁死值不允许修改
export const TEST_VALUES = ["TEST1", "TEST2"] as const;
// 从常量数组推导联合类型
export type TestEnum = typeof TEST_VALUES[number];

判断逻辑写法:

  • 单个固定值判断:直接用常量或者字面量都可以,TS会自动做类型校验和收窄
    // 写法1:用预定义常量
    if (yourVar === TEST_VALUES[0]) {}
    // 写法2:直接写字面量,TS会校验字符串合法性,写错会触发编译报错
    if (yourVar === "TEST1") {}
    
  • 判断变量是否属于TestEnum的任意合法取值:
    // 定义类型守卫函数
    function isTestEnum(value: unknown): value is TestEnum {
      return TEST_VALUES.includes(value as TestEnum);
    }
    // 使用
    if (isTestEnum(yourVar)) {
      // 此处yourVar的类型会自动被TS收窄为TestEnum
    }
    

方案2:改用TS字符串枚举

字符串枚举会被编译为运行时可用的对象,你可以直接访问枚举属性做判断:

// 定义字符串枚举
export enum TestEnum {
  TEST1 = "TEST1",
  TEST2 = "TEST2"
}

判断逻辑写法:

  • 单个固定值判断:
    if (yourVar === TestEnum.TEST1) {}
    
  • 判断变量是否属于TestEnum的任意合法取值:
    function isTestEnum(value: unknown): value is TestEnum {
      return Object.values(TestEnum).includes(value as TestEnum);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:03