Типы модулей
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