模組化 ( Module Types )

引入、匯出型別

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

exports.js

1
// @flow
2
export type Person = {
3
name: string,
4
age: number,
5
};
6
7
export class Book {
8
// ...
9
}
10
11
export interface Swim {
12
doSwim(): void;
13
}
14
Copied!

import.js

若要引入型別的話,要使用 import type 關鍵字來引入
1
// @flow
2
import type BookType, { Person, Swim } from './exports';
3
import Book from './my-modules'; // 因為要使用 new Book(),所以不能只使用 type
4
5
const book: BookType = new Book();
6
7
const person: Person = {
8
name: 'Wayne',
9
age: 26,
10
}
11
12
class Fish implements Swim {
13
doSwim() {
14
console.log('Fish Swim ~~~')
15
}
16
}
Copied!

引入、匯出值

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

exports.js

1
// @flow
2
export default {
3
name: 'Wayne',
4
age: 26,
5
};
6
7
export const book = {
8
name: '原子習慣',
9
price: 180,
10
}
11
12
export const user = {
13
name: 'Wayne',
14
password: '123456',
15
}
Copied!

import.js

1
// @flow
2
import typeof Person, { price as Price, isSoldOut } from './exports';
3
4
({ name: 'Wayne', age: 26 }: Person);
5
(180: Price);
6
(false: isSoldOut);
7
('false': isSoldOut); // 錯誤!
8
Copied!
Last modified 10mo ago