Spec-Zone.ru › Flow

Типы модулей

Flow позволяет обмениваться типами между файлами с помощью синтаксиса import type и export type.

import type {MyType} from './types';

Импорт и экспорт типов​

Вы можете экспортировать псевдонимы типов, интерфейсы и классы из одного файла и импортировать их в другой.

exports.js

export default class MyClass {};
export type MyObject = { /* ... */ };
export interface MyInterface { /* ... */ };

imports.js

import type MyClass, {MyObject, MyInterface} from './exports';

Не забудьте добавить @flow в начало файла, иначе Flow не будет сообщать об ошибках.

Импорт и экспорт значений в качестве типов​

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

exports.js

const myNumber = 42;
export default myNumber;
export class MyClass { /* ... */ };

imports.js

import typeof MyNumber from './exports';
import typeof {MyClass} from './exports';

const x: MyNumber = 1; // Works: like using `number`

Как и другие импорты типов, этот код может быть удалён компилятором, поэтому он не создаёт зависимость времени выполнения от другого модуля.

Если импортированное значение является обобщённым — например, функция или хук React с параметрами типа, — импортированный тип сохраняет возможность параметризации. Вы можете применить useState<number> к типу, импортированному через import typeof {useState} from 'react', чтобы получить специализацию number:

import typeof {useState} from 'react';


hook useCounter(useStateNum: useState<number>): number {
  const [count, setCount] = useStateNum(0);
  setCount(c => c + 1);
  return count;
}

О нюансе, специфичном для компонентов, когда import typeof применяется к экспорту по умолчанию обобщённого компонента, см. раздел import typeof с обобщёнными компонентами.

См. также​

  • Файлы объявлений — .flow файлы, объявляющие типы для модулей без типизации
  • Определения библиотек — объявление типов для сторонних пакетов
  • Типы typeof — import typeof для получения типа импортированного значения
  • Псевдонимы типов — определение именованных типов, которые можно экспортировать и импортировать

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

Spec-Zone.ru

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