Spec-Zone.ru › Flow

Перечисления Flow

Перечисления Flow определяют фиксированный набор констант, которые создают свой собственный тип.

В отличие от других функций Flow, перечисления Flow существуют как значения во время выполнения, а также как типы.

Прочитайте, как включить перечисления Flow в свой проект.

Преимущества

Перечисления предоставляют несколько преимуществ по сравнению с существующими шаблонами:

  • Сокращение повторений: Объявления перечислений предоставляют как тип, так и значение перечисления.
  • Повышение производительности Flow: Перечисления гарантируют хорошую производительность проверки типов, в отличие от объединений, которые могут быть дорогими для проверки типов в определенных ситуациях.
  • Включение новых функций: Перечисления поставляются с методом cast, который безопасно преобразует тип примитива в тип перечисления.
  • Повышение безопасности: Перечисления определяют свой собственный тип, который не подразумевает неявное приведение к другим типам (например, от string), и должны быть исчерпывающе проверены в операторах switch. Эти свойства могут помочь предотвратить логические ошибки.

Быстрый старт

Определение перечислений

Перечисление с именем Status с тремя членами: Active, Paused, и Off.

enum Status {
  Active,
  Paused,
  Off,
}

По умолчанию перечисления определяют члены со строковыми значениями, которые отражают их имена. Вы также можете явно задать значения:

enum Status {
  Active = 'active',
  Paused = 'paused',
  Off = 'off',
}

Вы также можете использовать числа:

enum Status {
  Active = 1,
  Paused = 2,
  Off = 3,
}

Значения должны быть уникальными, литералами и всех одного типа. Ознакомьтесь с полной документацией по определению перечислений, чтобы узнать больше.

Использование перечислений

Для доступа к члену перечисления используйте операцию доступа с точкой:

Status.Active

Для использования типа перечисления как аннотации используйте имя перечисления:

const status: Status = Status.Active;

Преобразование из типа представления (в данном случае, string) в тип перечисления:

const status: Status | void = Status.cast(someString);

Вы можете легко указать значение по умолчанию с помощью оператора ??:

const status: Status = Status.cast(someString) ?? Status.Off;

Узнайте больше о других методах, предоставляемых перечислениями, включая isValid, members, и getName.

Преобразование типа перечисления в его тип представления (должно выполняться явно):

(status: string)

Проверки перечислений в операторах switch исчерпывающие — мы гарантируем, что вы проверяете все члены:

// ERROR: Incomplete exhaustive check: the member `Off` of enum `Status`
// has not been considered in check of `status`.
switch (status) {
  case Status.Active: ...; break;
  case Status.Paused: ...; break;
  // We forgot to add `case: Status.Off:` here, resulting in error above.
  // Using `default:` would also work to check all remaining members.
}

Узнайте больше о исчерпывающей проверке перечислений.

Ознакомьтесь с полной документацией по использованию перечислений, чтобы узнать больше.

Когда использовать перечисления Flow

Если вы ранее определяли тип объединения литералов, вы можете использовать перечисление для определения этого типа вместо него. Вместо

type Status =
  | 'Active'
  | 'Paused'
  | 'Off';

const x: Status = 'Active';

или

const Status = Object.freeze({
  Active: 'Active',
  Paused: 'Paused',
  Off: 'Off',
});
type StatusType = $Keys<typeof Status>;
const x: StatusType = Status.Active;

вы можете использовать:

enum Status {
  Active,
  Paused,
  Off,
}
const x: Status = Status.Active;

См. миграцию из устаревших шаблонов, чтобы узнать больше о миграции устаревших шаблонов JavaScript перечислений в перечисления Flow.

Когда не следует использовать перечисления Flow

Перечисления разработаны для покрытия многих случаев использования и демонстрации определенных преимуществ. Конструктивные решения имеют ряд компромиссов, и в некоторых ситуациях эти компромиссы могут вам не подойти. В таких случаях вы можете продолжить использовать существующие шаблоны, чтобы удовлетворить ваши потребности. Узнайте больше об этих ситуациях.

© 2013–present Facebook Inc.
Licensed under the MIT License.
https://flow.org/en/docs/enums

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API