Module Types
Importing and exporting types
It is often useful to share types between modules (files). In Flow, you can export type aliases, interfaces, and classes from one file and import them in another.
exports.js
1export default class MyClass {};2export type MyObject = { /* ... */ };3export interface MyInterface { /* ... */ };
imports.js
import type MyClass, {MyObject, MyInterface} from './exports';
Don't forget to add
@flow
at the top of your file, otherwise Flow won't report errors.
Importing and exporting values as types
Flow also supports importing the type of values exported by other modules using typeof
.
exports.js
1const myNumber = 42;2export default myNumber;3export class MyClass { /* ... */ };
imports.js
import typeof MyNumber from './exports';
import typeof {MyClass} from './exports';
const x: MyNumber = 1; // Works: like using `number`
Just like other type imports, this code can be stripped away by a compiler so that it does not add a runtime dependency on the other module.