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

时间:2019-09-29 19:07:37

标签: javascript typescript enums

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

相关问题