跳到主要內容

版本-0.19.0

Flow v0.19.0 已於今日部署!它有許多變更,變更記錄 摘要如下。不過,變更記錄可能有點簡潔,因此以下針對部分變更提供較長的說明。希望這有幫助!

@noflow

Flow 預設為加入(將 @flow 加入檔案)。不過,我們發現有時候人們會將 Flow 註解加入缺少 @flow 的檔案。這些人常常沒有注意到 Flow 忽略了該檔案。因此,我們決定不再允許在非 Flow 檔案中使用 Flow 語法。這很容易修正,只要將 @flow@noflow 加入您的檔案即可。前者會將檔案設為 Flow 檔案。後者會指示 Flow 完全忽略該檔案。

宣告檔案

現在會特別處理以 .flow 結尾的檔案。它們是模組的首選提供者。也就是說,如果 foo.jsfoo.js.flow 都存在,當您撰寫 import Foo from './foo' 時,Flow 會使用從 foo.js.flow 匯出的類型,而不是 foo.js

我們想像人們會使用 .flow 檔案的兩種主要方式。

  1. 作為介面檔案。或許您有一些程式庫 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 {}
  2. 作為原始來源。或許您想要發布 awesomeLibrary.js 的縮小、轉換版本,但使用 awesomeLibrary.js 的人也會使用 Flow。您可以執行類似下列動作

    cp awesomeLibraryOriginalCode.js awesomeLibrary.js.flow
    babel awesomeLibraryOriginalCode --out-file awesomeLibrary.js

函式庫檔案的優先順序

現在您的本機函式庫檔案將覆寫內建函式庫檔案。內建的 Flow 函式庫之一有問題嗎?請發送拉取請求!但在您等待下一個版本時,您可以使用您自己的定義!優先順序如下

  1. 透過 --lib 在命令列上提供的任何路徑
  2. .flowconfig 中指定的 [libs] 路徑中找到的檔案(依清單順序)
  3. 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;
}