在打字稿中使用枚举内的枚举?

Hen*_*aye 6 javascript enums typescript

enum KINDS {
  STATIC = 1,
  FIELD,
  ARG,
  VAR
}

enum ALL_KINDS {
  STATIC = 1,
  FIELD,
  ARG,
  VAR,
  NONE
}
Run Code Online (Sandbox Code Playgroud)

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

geo*_*org 4

AFAIK,正在考虑扩展枚举,同时您可以使用 const 对象代替:

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

const ALL_KINDS = <const>{ ...KINDS, NONE: 5 };
Run Code Online (Sandbox Code Playgroud)

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

如果您希望检查此类型,请注意,从类型角度来看,数字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 (?)
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

这有点冗长,但随后您会实际检查您的类型。