Flow v0.19.0 已於今日部署!它有許多變更,變更記錄 摘要如下。不過,變更記錄可能有點簡潔,因此以下針對部分變更提供較長的說明。希望這有幫助!
@noflow
Flow 預設為加入(將 @flow 加入檔案)。不過,我們發現有時候人們會將 Flow 註解加入缺少 @flow 的檔案。這些人常常沒有注意到 Flow 忽略了該檔案。因此,我們決定不再允許在非 Flow 檔案中使用 Flow 語法。這很容易修正,只要將 @flow 或 @noflow 加入您的檔案即可。前者會將檔案設為 Flow 檔案。後者會指示 Flow 完全忽略該檔案。
宣告檔案
現在會特別處理以 .flow 結尾的檔案。它們是模組的首選提供者。也就是說,如果 foo.js 和 foo.js.flow 都存在,當您撰寫 import Foo from './foo' 時,Flow 會使用從 foo.js.flow 匯出的類型,而不是 foo.js。
我們想像人們會使用 .flow 檔案的兩種主要方式。
作為介面檔案。或許您有一些程式庫
coolLibrary.js,使用內嵌 Flow 類型很難進行類型化。您可以將coolLibrary.js.flow放置在它旁邊,並宣告coolLibrary.js匯出的類型。// coolLibrary.js.flow
declare export var coolVar: number;
declare export function coolFunction(): void;
declare export class coolClass {}作為原始來源。或許您想要發布
awesomeLibrary.js的縮小、轉換版本,但使用awesomeLibrary.js的人也會使用 Flow。您可以執行類似下列動作cp awesomeLibraryOriginalCode.js awesomeLibrary.js.flow
babel awesomeLibraryOriginalCode --out-file awesomeLibrary.js
函式庫檔案的優先順序
現在您的本機函式庫檔案將覆寫內建函式庫檔案。內建的 Flow 函式庫之一有問題嗎?請發送拉取請求!但在您等待下一個版本時,您可以使用您自己的定義!優先順序如下
- 透過 --lib 在命令列上提供的任何路徑
- .flowconfig 中指定的
[libs]路徑中找到的檔案(依清單順序) - Flow 核心函式庫檔案
例如,如果我想覆寫 Array 的內建定義,而改用我自己的版本,我可以更新我的 .flowconfig 以包含
// .flowconfig
[libs]
myArray.js
// myArray.js
declare class Array<T> {
// Put whatever you like in here!
}
延遲初始化
以前,以下程式碼會出錯,因為 myString 的初始化發生在稍後。現在 Flow 可以接受它。
function foo(someFlag: boolean): string {
var myString:string;
if (someFlag) {
myString = "yup";
} else {
myString = "nope";
}
return myString;
}