Spec-Zone.ru › Flow

Глоссарий

Краткий глоссарий терминологии Flow. Каждая статья содержит определение в одном предложении и ссылку на полную справочную страницу. Если это полезно, в статье также отмечается, как понятие соотносится с похожим понятием в TypeScript.

Система типов​

  • Уточнение типа — сужение типа значения внутри ветви на основе проверки во время выполнения, например typeof, instanceof, проверки на равенство или защитника типа. См. Уточнение типов.
  • Инвалидация уточнения типа — ситуация, когда ранее установленное уточнение типа сбрасывается, поскольку промежуточный код (например, вызов функции или запись в уточнённое место) мог изменить исходное значение, и проверку нужно выполнить повторно; механизм сужения типов в TypeScript имеет собственную модель инвалидации, которая в деталях отличается от модели Flow (подробнее). См. Инвалидация уточнений типов.
  • Тип Maybe (?T) — сокращённая запись объединения типов T | null | void в Flow, используемая для обозначения значений, которые могут отсутствовать; в TypeScript нет прямого аналога, и обычно записывают T | null | undefined (подробнее). См. Типы Maybe.
  • Точный тип объекта — тип объекта, допускающий только перечисленные свойства и никакие другие; в Flow это поведение используется по умолчанию (в отличие от TypeScript, где типы объектов открыты) (подробнее). См. Точные и неточные типы объектов.
  • Неточный тип объекта — тип объекта с завершающим ... (например, {foo: number, ...}), допускающий дополнительные неизвестные свойства помимо перечисленных; типы объектов TypeScript по умолчанию открыты и не имеют синтаксического маркера неточности (подробнее). См. Точные и неточные типы объектов.
  • Разворачивание типа объекта — включение свойств другого типа объекта с помощью ... (например, {...A, b: T}), в результате чего создаётся новый тип объекта, объединяющий свойства A с дополнительными членами, подобно разворачиванию объектов во время выполнения; в TypeScript нет разворачивания на уровне типов, и вместо него используется пересечение (A & {b: T}) (подробнее). См. Разворачивание типа объекта.
  • Индексируемое свойство — член типа объекта вида [key: K]: V, разрешающий чтение и запись по любому ключу, тип которого соответствует K, и с любым значением, тип которого соответствует V; используется для типизации объектов-словарей. См. Объекты-словари.
  • Непересекающееся объединение — объединение отдельных типов объектов (например, {type: 'A', value: number} | {type: 'B', error: string}), каждый из которых задаёт свой литеральный тип для общего свойства-дискриминанта, позволяя Flow уточнить объединение до конкретного варианта при проверке этого свойства. См. Непересекающиеся объединения объектов.
  • Непрозрачный тип — псевдоним типа, базовый тип которого скрыт за пределами файла, где он определён, что обеспечивает абстракцию на границах модулей; в TypeScript такого понятия нет, а ближайший пользовательский аналог (брендированные типы) слабее, поскольку одним приведением as можно создать значение с брендом (подробнее). См. Псевдонимы непрозрачных типов.
  • Пустой тип — нижний тип в Flow, подтип любого другого типа; используется для функций, которые ничего не возвращают, и для утверждений о полноте обработки вариантов; аналог в TypeScript называется never (подробнее). См. Пустой тип.
  • Подтипизация по ширине — правило, согласно которому тип объекта с большим количеством свойств является подтипом типа с меньшим количеством свойств (в Flow это верно только для неточных типов объектов); это правило гораздо строже, чем в TypeScript, где типы объектов по умолчанию открыты (подробнее). См. Подтипизация объектов.
  • Подтипизация по глубине — правило, согласно которому тип объекта, имеющий в некотором свойстве подтип, является подтипом типа, имеющего в этом свойстве супертип; это правило безопасно только для свойств, доступных только для чтения. TypeScript всё равно рассматривает изменяемые свойства ковариантно, тогда как Flow делает их инвариантными (подробнее). См. Подтипизация объектов.
  • Номинальная типизация — совместимость типов определяется идентичностью объявления, а не структурой; Flow использует её для классов, непрозрачных типов (за пределами файла, где они определены) и перечислений Flow. TypeScript в основном использует структурную типизацию, допуская отдельные узкие исключения для номинальной типизации (поля #private, модификаторы private/protected, unique symbol) (подробнее). См. Номинальная и структурная типизация.
  • Структурная типизация — совместимость типов определяется их структурой; Flow использует её для объектов и интерфейсов. См. Номинальная и структурная типизация.
  • Локальный вывод типов — алгоритм вывода типов Flow, распространяющий типы из непосредственного контекста, но требующий аннотаций для параметров функций и других важных границ. См. Требование аннотаций.
  • Односторонний защитник типа (implies) — функция-предикат с типом возвращаемого значения implies param is T, которая уточняет параметр до T только при возврате функцией true, а в противном случае оставляет его без изменений; в TypeScript аналога нет (подробнее). См. Защитники типов.
  • Отвязка метода — Flow запрещает извлекать метод класса как отдельное значение функции (например, obj.method без вызова, деструктуризации или применения .bind()), поскольку при этом теряется тип this, от которого зависит метод; TypeScript рассматривает методы как обычные значения функций и молча разрешает такое извлечение (подробнее). См. Отвязка метода.
  • Входная позиция / выходная позиция — термины, используемые в сообщениях об ошибках вариантности Flow для обозначения того, куда значение записывается в тип (вход — параметры функций, свойства, доступные для записи) и откуда оно читается из типа (выход — типы возвращаемых значений, свойства, доступные для чтения). В Flow и TypeScript используется одинаковый синтаксис вариантности — in T / out T для параметров типов, readonly / writeonly для свойств, — но правила вариантности Flow в ряде случаев строже (изменяемые свойства, изменяемые массивы, параметры методов, аргументы обобщённых типов) (подробнее). См. Входные и выходные позиции.

Модули и объявления​

  • import typeof — специальная для Flow форма импорта, которая импортирует тип экспорта-значения из другого модуля, чтобы его можно было использовать как аннотацию типа; ближайший аналог в TypeScript — typeof import('./m')['Foo'], но с другой формой связывания (подробнее). См. Типы модулей.
  • Файл объявлений (.js.flow) — файл .flow, размещённый рядом с реализацией .js и полностью подменяющий типы реализации при проверке кода в Flow; .d.ts в TypeScript охватывает как этот случай, так и случай сторонних пакетов, для которых Flow использует определения библиотек (подробнее). См. Файлы объявлений.
  • Определение библиотеки (libdef) — специальный файл в flow-typed/, объявляющий сигнатуры типов стороннего модуля, который Flow не может проверять напрямую; эквивалент в TypeScript — пакеты @types/* и файлы .d.ts на уровне пакета (подробнее). См. Определения библиотек.
  • Извлечение сигнатуры / типизированный интерфейс — Flow строит для каждого модуля «типизированный интерфейс», используя только экспорты модуля, без анализа реализации; это позволяет выполнять проверку типов параллельно. Если Flow не может этого сделать, возникает ошибка [signature-verification-failure]. В TypeScript аналога нет: он выводит типы экспортов на основе тел модулей (подробнее). См. Экспорты модулей.

React​

  • Синтаксис компонентов (component) — встроенное ключевое слово Flow для объявления компонентов React с именованными свойствами, необязательным ref и поддержкой типа рендеринга; заменяет написанные вручную типы функциональных компонентов. В TypeScript нет встроенного синтаксиса component, и аналогичная структура задаётся типами функций (подробнее). См. Синтаксис компонентов.
  • Тип компонента (component(...)) — форма на уровне типов для синтаксиса компонентов, используемая для описания типа компонента React (особенно в определениях библиотек и компонентах высшего порядка), не объявляя сам компонент. См. Типы компонентов.
  • Тип рендеринга (renders) — тип, задающий, что компоненту разрешено рендерить; позволяет авторам библиотек устанавливать правила композиции, например «Menu может рендерить только MenuItem»; в TypeScript нет встроенного типа для ограничения рендеринга (подробнее). См. Типы рендеринга.
  • Синтаксис хуков (hook) — встроенное ключевое слово Flow для объявления хуков React, позволяющее Flow проверять соблюдение правил React в местах вызова хуков; в TypeScript аналога нет, и для проверки правил хуков без информации о типах используется ESLint (eslint-plugin-react-hooks) (подробнее). См. Синтаксис хуков.

Возможности языка​

  • Перечисление Flow — фиксированный набор констант, существующий и во время выполнения, и в качестве типа, со встроенной проверкой полноты обработки вариантов и без неявного приведения к базовому примитивному типу; по ряду параметров семантически отличается от enum в TypeScript (полнота обработки, приведение, значения по умолчанию, обратное отображение, перебор членов, символьные перечисления) (подробнее). См. Перечисления Flow.
  • Выражение match / инструкция match — конструкция match (...) { pattern => ... }, сопоставляющая значение с образцами по структуре, защитниками и проверкой полноты обработки; в TypeScript нет match, а ближайший аналог в форме инструкции — switch с различаемыми объединениями и assertNever в ветке по умолчанию; аналога в форме выражения нет (подробнее). См. Выражения и инструкции match.
  • Проверка полноты обработки вариантов — проверка того, что обработано каждое возможное значение входных данных; встроенно поддерживается в match и в switch для перечислений Flow. Для произвольных инструкций switch такую проверку можно выполнить по требованию, приведя ветку по умолчанию к empty.

Рабочий процесс​

  • Директива @flow — комментарий // @flow в начале файла, который по умолчанию включает проверку типов Flow для этого файла. См. Начало работы.
  • Строгий режим Flow (@flow strict / @flow strict-local) — директива уровня файла, включающая настраиваемый набор более строгих правил линтера (запрет any и т. д.) для отдельного файла; более распространённый вариант @flow strict-local работает так же, но не требует, чтобы зависимости тоже использовали строгий режим. См. Строгий режим Flow.
  • Подавление ошибки ($FlowFixMe[code]) — комментарий, размещённый непосредственно над ошибкой Flow, который скрывает эту конкретную ошибку, не устраняя её причину; используется, когда Flow чрезмерно строг или исправление откладывается. См. Подавление ошибок.
  • Flowlint — встроенная система линтинга Flow, которая выявляет стилистические и потенциально опасные конструкции (например, sketchy-null, untyped-import) в дополнение к обычным ошибкам типов. См. Обзор линтинга.

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

Spec-Zone.ru

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