【问题标题】:Using an enum inside enum in typescript?在打字稿中使用枚举内的枚举?
【发布时间】:2026-02-01 21:40:01
【问题描述】:
enum KINDS {
  STATIC = 1,
  FIELD,
  ARG,
  VAR
}

enum ALL_KINDS {
  STATIC = 1,
  FIELD,
  ARG,
  VAR,
  NONE
}

如何在第二个枚举中重用第一个枚举?

【问题讨论】:

  • “重用”是指您希望ALL_KINDS 包含来自KINDS 的具有相同值的条目?
  • 是的@DaveNewton。

标签: javascript typescript enums


【解决方案1】:

AFAIK,扩展枚举是 under consideration,同时您可以使用 const 对象:

const KINDS = <const>{
  STATIC: 1,
  FIELD: 2,
  ARG: 3,
  VAR: 4
};

const ALL_KINDS = <const>{ ...KINDS, NONE: 5 };

上述线程中还有其他解决方法。

如果要检查此类型,请注意,从类型角度来看,数字 enum 等效于 number

enum KINDS {
  STATIC,
  FIELD,
  ARG,
  VAR
}

declare function func(name: string, type: string, kind: KINDS): any;

func('foo', 'bar', KINDS.ARG); // compiles
func('foo', 'bar', 99); // compiles too (?)

如果您使用上面建议的对象,您还可以通过为该对象的所有可能值创建类型来强制执行严格的类型检查:

const KINDS = <const>{
  STATIC: 1,
  FIELD: 2,
  ARG: 3,
  VAR: 4
};

type KIND_VALUE = typeof KINDS[keyof typeof KINDS]

declare function define(name: string, type: string, kind: KIND_VALUE): any;

define('foo', 'bar', KINDS.ARG); // compiles
define('foo', 'bar', 99); // doesn't compile

这有点冗长,但实际上你已经检查了你的类型。

【讨论】:

  • 在方法声明中,define(name: string, type: string, kind: KINDS) {},它显示错误'KINDS' refer to a value , but is used as a type here .这就是我使用枚举的方式。