类型别名
当您有想要在多个地方重复使用的复杂类型时,可以使用 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};