Spec-Zone.ru › Flow

Модернизация устаревшего синтаксиса Flow

Синтаксис Flow со временем претерпел значительные изменения, при этом многие формы приблизились к вариантам написания, совместимым с TypeScript. Многие служебные типы с префиксом $ были переименованы, некоторые были полностью удалены, а некоторые устаревшие синтаксические конструкции получили современные эквиваленты в виде ключевых слов. Эта страница является каноническим справочником по замене устаревших форм современными аналогами.

Эти формы делятся на три группы:

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

Удалённые​

Flow больше не распознаёт их.

Устаревший Flow Современный эквивалент Удалено в версии
$Diff<A, B> Обычно Omit<A, keyof B> или реструктуризация. Не всегда семантически идентично — рассматривайте каждый случай отдельно. 0.268.0
$Rest<A, B> Тот же статус, что и у $Diff. Обычно можно заменить на Omit + spread. 0.267.0
$PropertyType<T, K> T[K] (доступ по индексу). 0.266.0
$ElementType<T, K> T[K] (доступ по индексу). 0.266.0
$TupleMap<T, F> Отображённый тип (Mapped type) со встроенным телом F — например, $TupleMap<T, <V>(V) => Promise<V>> становится {[K in keyof T]: Promise<T[K]>}. 0.248.0
$TupleMapi<T, F> Отображённый тип (Mapped type) с доступом по ключу и встроенным F — например, {[K in keyof T]: [K, T[K]]}. 0.248.0
Функции-предикаты %checks Защитники типов (Type guards) — например, function isString(x: unknown): boolean %checks становится function isString(x: unknown): x is string. 0.248.0
$Call<F, ...Args> ReturnType<F> плюс доступ по индексу или условный тип с infer. 0.247.0
$ObjMap<O, F> Отображённый тип (Mapped type) со встроенным F — например, $ObjMap<O, <V>(V) => Promise<V>> становится {[K in keyof O]: Promise<O[K]>}. 0.246.0
$ObjMapi<O, F> Отображённый тип (Mapped type) с доступом по ключу и встроенным F — например, {[K in keyof O]: [K, O[K]]}. 0.246.0
React.Element<typeof Foo> Отдавайте предпочтение типам рендеринга (render types) при описании ограничений композиции («Menu рендерит только элементы MenuItem») — именно это в большинстве случаев выражало использование React.Element<typeof Foo>. Для общих позиций «любой элемент / любой узел» используйте React.MixedElement / React.Node. Обращайтесь к ExactReactElement_DEPRECATED<typeof Foo> только как к крайнему средству, когда действительно требуется точная идентичность элемента. 0.245.0
$Shape<T> Partial<T>. Не всегда семантически идентично — $Shape допускал вложенность так, как не допускает Partial, поэтому выполняйте миграцию в каждом месте использования отдельно, а не просто переименовывайте вслепую. 0.206.0
$Partial<T> Partial<T>. 0.203.0

Устаревшие​

Существует современный эквивалент. Некоторые формы уже сейчас приводят к ошибкам; другие всё ещё разбираются парсером, но находятся в процессе вывода из эксплуатации.

Служебные типы​

Устаревший Flow Современный Flow Включено по умолчанию начиная с версии
$Keys<T> keyof T 0.290
$ReadOnly<T> Readonly<T> 0.290
$NonMaybeType<T> NonNullable<T> 0.290
$ReadOnlyArray<T> ReadonlyArray<T> 0.290
$ReadOnlyMap<K, V> / $ReadOnlySet<T> / $ReadOnlyWeakMap<K, V> / $ReadOnlyWeakSet<T> ReadonlyMap / ReadonlySet / ReadonlyWeakMap / ReadonlyWeakSet 0.290
$Values<T> Values<T> (переименовано в составе собственных служебных типов Flow) 0.290
mixed unknown 0.290

Синтаксические конструкции (не служебные типы)​

Устаревший Flow Современный Flow Включено по умолчанию начиная с версии
Приведение типов (x: T) x as T 0.229
<T: Bound> <T extends Bound> 0.302
Точные типы {| a: number |} {a: number} (точный тип по умолчанию) 0.202
Символы вариативности свойств +foo / -foo readonly foo / ключевые слова writeonly foo (writeonly специфично для Flow) 0.315
Символы вариативности параметров типа +T / -T Ключевые слова out T / in T 0.315

Не рекомендуемые к использованию​

Эта форма всё ещё распознаётся средством проверки типов и не вызывает ошибок, однако в новом коде её следует избегать.

Тип Рекомендуемый подход
$Exact<T> Сначала определите точный тип, а затем создавайте неточные варианты на его основе с помощью spread-оператора для типов объектов ({...Exact, ...}). См. $Exact<T> (Не рекомендуется).

Служебные типы с префиксом $, не являющиеся устаревшими​

Некоторые типы с префиксом $ остаются полноценными служебными типами Flow — префикс $ является просто частью имени, а не признаком устаревания. Они узкоспециализированы и встречаются редко, но если вы с ними столкнётесь, продолжайте их использовать. Примеры включают $KeyMirror<O> и $Exports<...>. Актуальный список см. в разделе Служебные типы (Utility Types).

См. также​

  • Flow для пользователей TypeScript — более широкое сравнение Flow и TypeScript, включая согласованное с TS подмножество переименований, рассмотренных здесь.
  • Служебные типы — справочник по текущим служебным типам Flow.
  • Отображённые типы (Mapped Types) — современная замена для $ObjMap / $TupleMap и аналогичных конструкций.
  • Приведение типов — синтаксис приведения типов as, заменяющий (x: T).
  • Типы с доступом по индексу (Indexed Access Types) — форма T[K], заменяющая $PropertyType / $ElementType.
  • Устаревшие и удалённые параметры .flowconfig — часть этих миграций, относящаяся к [options], включая casting_syntax и exact_by_default, с указанием версии, в которой произошли изменения.

© 2013–present Facebook Inc.
Licensed under the MIT License.
https://flow.org/en/docs/modernizing-legacy-syntax

Spec-Zone.ru

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