Как мне сделать сравнение Enum в машинописи - PullRequest
2 голосов
/ 26 февраля 2020

У меня есть проект jhipster, и они только что выполнили перечисление из этого:

export enum DeclarationStatus {
  NEW = 'NEW',
  DRAFT = 'DRAFT',
  APPROVED_BY_FREELANCER = 'APPROVED_BY_FREELANCER',
  APPROVED_BY_CLIENT = 'APPROVED_BY_CLIENT',
  APPROVED = 'APPROVED'
}

к этому:

export enum DeclarationStatus {
  NEW,
  DRAFT,
  APPROVED_BY_FREELANCER,
  APPROVED_BY_CLIENT,
  APPROVED
}

Сначала я мог бы сделать сравнение следующим образом:

status === DeclarationStatus.APPROVED_BY_FREELANCER;

Но теперь это больше не работает, потому что enum - это на самом деле число. Это работает как всегда:

DeclarationStatus[''+status] === DeclarationStatus.APPROVED_BY_FREELANCER;

Так что мой вопрос, который лучше. Или есть даже 3-й вариант?


Я задаю этот вопрос с ответом. Сообщество Jhipster вернуло изменение в инициализированное. Так что сравнение снова легко.

Спасибо @vicpermir, который сделал это возможным.

1 Ответ

3 голосов
/ 26 февраля 2020

Проблема здесь в том, что строка enum не инициализирована. Пока ваши перечисления не определены как const, вы можете сделать очень похожее сравнение с вашим старым методом.

status === DeclarationStatus[DeclarationStatus.APPROVED_BY_FREELANCER];

Другими словами, должно работать следующее:

enum Initialized {
    A = 'A',
    B = 'B'
}

enum NotInitialized { // equivalent to
    A,                // A = 0,
    B                 // B = 1
}

status = 'A';

// String enum initialized
let test1 = (status === Initialized.A); // true

// String enum not initialized
let test2 = (status === NotInitialized.A); // false
let test3 = (status === NotInitialized[NotInitialized.A]); // true :)

В официальном репозитории github для JHipster Generator есть недавно слитый запрос на извлечение ( PR # 11218 ), который исправляет эту проблему для React и вынуждает генератор всегда инициализировать перечисления строк.

Помните, что, как описано в JDL-документах , вы также можете принудительно инициализировать:

enum DeclarationStatus {
   NEW (NEW),
   DRAFT (DRAFT)
}

Более подробную информацию о перечислениях TypeScript можно найти здесь .

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