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

TypeScript中如何判断参数是枚举值还是枚举值数组?

正确判断枚举值与枚举值数组的方法

你遇到的错误根源在于:字符串枚举的成员本质是字符串类型,instanceof仅能用于判断类/构造函数的实例,枚举并不满足这个条件,因此无法通过它来判断。另外你代码里还有个笔误——条件中的settingType应该是settingTypes(少了末尾的s)。

下面是修正后的完整代码,同时兼顾合法性验证:

export enum SettingType {
  hairColors = 'haircolors',
  hatSizes = 'hatsizes'
}

public getSettings(settingTypes: SettingType | SettingType[]) {
  // 第一步:判断是否为数组
  if (Array.isArray(settingTypes)) {
    // 处理多枚举值场景
    settingTypes.forEach(type => {
      // 可选:验证元素是否为合法枚举值
      if (Object.values(SettingType).includes(type)) {
        // 在此编写单类型数据获取逻辑
      }
    });
  } else {
    // 处理单枚举值场景
    // 可选:验证值是否为合法枚举值
    if (Object.values(SettingType).includes(settingTypes)) {
      // 在此编写单类型数据获取逻辑
    }
  }
}

public theUsage() {
  this.getSettings(SettingType.hairColors);
  this.getSettings([SettingType.hairColors, SettingType.hatSizes]);
}

关键说明

  • 用Array.isArray()判断数组是最可靠的方式,避免了其他判断方法的兼容性问题。
  • 由于你使用的是字符串枚举,Object.values(SettingType)会返回所有枚举成员的字符串值数组(['haircolors', 'hatsizes']),因此可以用includes()验证传入值的合法性,防止非法字符串传入。
  • 如果是数字枚举,Object.values()会同时包含枚举的键和数值,此时可以结合typeof判断类型,比如typeof settingTypes === 'number' && Object.values(SettingType).includes(settingTypes)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:00:59