類型別名
當您有複雜的類型想要在多個地方重複使用時,可以使用 類型別名在 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};