跳至主要內容

類型別名

當您有複雜的類型想要在多個地方重複使用時,可以使用 類型別名在 Flow 中設定別名。

1type MyObject = {2  foo: number,3  bar: boolean,4  baz: string,5};

這些類型別名可以在任何可以使用類型的的地方使用。

1type MyObject = {2  // ...3};4
5const val: MyObject = { /* ... */ };6function method(val: MyObject) { /* ... */ }7class Foo { constructor(val: MyObject) { /* ... */ } }

類型別名就是別名。它們不會建立不同的類型,只會為某個類型建立另一個名稱。這表示類型別名可以完全與它所等於的類型互換。

1type MyNumber = number;2declare const x: MyNumber;3declare function foo(x: number): void;4foo(x); // ok, because MyNumber = number

不透明類型別名提供了一種替代方案,供您在不希望將類型視為相同時使用。

類型別名語法

類型別名使用關鍵字 type 建立,後面接著其名稱、等號 = 和類型定義。

type Alias = Type;

任何類型都可以在類型別名中出現。

1type NumberAlias = number;2type ObjectAlias = {3  property: string,4  method(): number,5};6type UnionAlias = 1 | 2 | 3;7type AliasAlias = ObjectAlias;

類型別名泛型

類型別名也可以有自己的泛型

1type MyObject<A, B, C> = {2  property: A,3  method(val: B): C,4};

類型別名泛型是參數化的。當您使用類型別名時,您需要為其每個泛型傳遞參數。

1type MyObject<A, B, C> = {2  foo: A,3  bar: B,4  baz: C,5};6
7var val: MyObject<number, boolean, string> = {8  foo: 1,9  bar: true,10  baz: 'three',11};