註解類型
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 上游。