跳至主要內容

註解類型

Flow 支援基於註解的語法,這使得您可以在不編譯檔案的情況下使用 Flow。

1/*::2type MyAlias = {3  foo: number,4  bar: boolean,5  baz: string,6};7*/8
9function method(value /*: MyAlias */) /*: boolean */ {10  return value.bar;11}12
13method({foo: 1, bar: true, baz: ["oops"]});
13:33-13:40: Cannot call `method` with object literal bound to `value` because array literal [1] is incompatible with string [2] in property `baz`. [incompatible-call]

這些註解讓 Flow 可以直接在 JavaScript 檔案中運作,而不需要任何額外的作業。

註解類型語法

語法主要包含兩個部分:類型包含和類型註解。

類型包含註解

如果您希望 Flow 將註解視為一般語法,您可以在註解的開頭加上雙冒號 ::

1/*::2type MyAlias = {3  foo: number,4  bar: boolean,5  baz: string,6};7*/8
9class MyClass {10  /*:: prop: string; */11}

這會將程式碼包含到 Flow 看到的語法中

1type MyAlias = {2  foo: number,3  bar: boolean,4  baz: string,5};6
7class MyClass {8  prop: string;9}

但 JavaScript 會忽略這些註解,因此您的程式碼是有效的 JavaScript 語法

1class MyClass {2
3}

此語法也可用於 flow-include 形式

1/*flow-include2type MyAlias = {3  foo: number,4  bar: boolean,5  baz: string,6};7*/8
9class MyClass {10  /*flow-include prop: string; */11}

類型註解註解

您也可以在註解開頭使用單個冒號 : 的類型註解簡寫,而不必每次都輸入完整的 include。

1function method(param /*: string */) /*: number */ {2  return 1;3}

這與在 include 註解中包含類型註解相同。

1function method(param /*:: : string */) /*:: : number */ {2  return 1;3}

注意:如果您想使用可選函數參數,則需要使用 include 註解形式。


特別感謝:感謝 Jarno Rantanen 建立 flotate,並支援我們將他的語法合併至 Flow 上游。