模組化 ( Module Types )

引入、匯出型別

我們常常會需要以模組為單位的定義、引用我們的型別 ( 以檔案為單位 )。 在 Flow 中可以匯出 type、interfaces、或是 class 等類型。

exports.js

// @flow
export type Person = {
  name: string,
  age: number,
};

export class Book {
  // ...
}

export interface Swim {
  doSwim(): void;
}

import.js

若要引入型別的話,要使用 import type 關鍵字來引入

// @flow
import type BookType, { Person, Swim } from './exports';
import Book from './my-modules'; // 因為要使用 new Book(),所以不能只使用 type

const book: BookType = new Book();

const person: Person = {
  name: 'Wayne',
  age: 26,
}

class Fish implements Swim {
  doSwim() {
    console.log('Fish Swim ~~~')
  }
}

引入、匯出值

Flow 也支援使用 import typeof 關鍵字,直接引入某個值的型別

exports.js

// @flow
export default {
  name: 'Wayne',
  age: 26,
};

export const book = {
  name: '原子習慣',
  price: 180,
}

export const user = {
  name: 'Wayne',
  password: '123456',
}

import.js

// @flow
import typeof Person, { price as Price, isSoldOut } from './exports';

({ name: 'Wayne', age: 26 }: Person);
(180: Price);
(false: isSoldOut);
('false': isSoldOut); // 錯誤!

Last updated