Использование перечисления внутри перечисления в машинописи? - PullRequest
3 голосов
/ 29 сентября 2019
enum KINDS {
  STATIC = 1,
  FIELD,
  ARG,
  VAR
}

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

Как я могу использовать первое перечисление внутри второго?

1 Ответ

2 голосов
/ 29 сентября 2019

AFAIK, расширение перечислений составляет на рассмотрении , в то же время вы можете использовать константные объекты вместо:

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

Это немного более многословно, но тогда ваш тип фактически проверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...