メインコンテンツにスキップ

Flowは、コンポーネントとフックなどのReactプリミティブのファーストクラスサポートをFlow言語に追加するコンポーネント構文を発表することを嬉しく思います。これらの機能により、Reactの多くのルールのエルゴノミクス、表現力、および静的強制が向上します。

条件付き型を使用すると、入力型を検査することにより、2つの異なる出力型から選択できます。

v0.201.0以降、Flowは未使用/フローティングPromiseに対してリントできるようになりました。未使用のPromiseは危険な場合があります。エラーが処理されない可能性があり、コードが意図した順序で実行されない可能性があるためです。それらは通常、Flowが警告するのに最適な間違いです。

ローカル型推論は、Flowのアノテーション要件を適度に増やし、業界標準に近づけ、ますます強力で明示的に型指定されたコードベースを活用することにより、Flowの推論動作をより信頼性が高く予測可能にします。

Flowは、空のオブジェクトリテラル{}を許可的だが安全でない方法で処理しました。この投稿で説明されている修正により、安全性と予測可能性が向上しますが、異なるパターンと動作を使用する必要があります。

Flowは、初期化時にアノテーションされていない変数の型を決定する新しい言語ルールをリリースしています。これらの新しいルールに加えて、絞り込みが無効にならない原因となっていた健全性バグに対するいくつかの修正が行われています。

Flowの現在の推論エンジンを、より予測可能に動作し、より局所的に推論できるシステムに置き換えています。

Flow列挙型は、独自の型を作成する固定の定数セットを定義できるオプトイン機能です。

Flowのインデックス付きアクセスタイプは、オブジェクト、配列、またはタプル型からプロパティの型を取得できる新しい型アノテーション構文です。

Flowは、以前に許可されていた安全でない動作を禁止し、エラーメッセージを明確にすることにより、ジェネリック型の処理を改善しました。

2019年にFlowに加えられた改善点を振り返ります。

オブジェクトスプレッドの修正により、コードベースのエラーが明らかになります。一般的なエラーとその修正方法について詳しくお読みください。

0.84.0からのアップグレードに問題がありますか? FlowチームがFacebookでFlowをアップグレードする方法についてお読みください!

新しいReactコンポーネントをより適切にモデル化するために、Reactモデルにいくつかの大きな変更を加えました。 React.AbstractComponentについて話しましょう!

Flowは0.85.0からより多くのアノテーションを要求するようになります。最新のブログ投稿でこれらのエラーに対処する方法を学びます。

昨年、Flowチームはタイプチェッカーによって生成される可能性のあるすべてのエラーメッセージをゆっくりと監査および改善してきました。 Flow 0.66では、Flowが見つけた各バグの読み取りと修正にかかる時間を短縮するように設計された新しいエラーメッセージ形式を発表できることを嬉しく思います。

ここ数週間で、Javascriptのプライベートクラスフィールドの提案がステージ3に達しました。これは、実装の詳細をクラスのユーザーから隠すための優れた方法です。ただし、より機能的なスタイルを好む場合、OOPスタイルのプログラミングに固定することは必ずしも理想的ではありません。 Flowの不透明型エイリアスを使用して、任意のオブジェクト型でプライベートプロパティを取得する方法について説明しましょう。

ReactのFlowサポートの最初のバージョンは、React.createClass()の魔法の実装でした。それ以来、Reactは大きく進化しました。 FlowがReactをモデル化する方法を再考する時が来ました。

Flowの型情報は、プログラムが正しいことを証明するだけではありません。 Flowリンターを紹介します。

実装の詳細をユーザーから隠したいと思ったことはありませんか?不透明型エイリアスがどのようにジョブを完了できるかをご覧ください!

関数呼び出しアリティの厳密なチェック

Flowの当初の目標の1つは、慣用的なJavaScriptを理解できるようにすることでした。 JavaScriptでは、関数が予期するよりも多くの引数を使用して関数を呼び出すことができます。したがって、Flowは、余分な引数で関数を呼び出すことについて文句を言うことはありませんでした。

この動作を変更しています。

Flow-Typedの紹介

高品質でコミュニティ主導のライブラリ定義(「libdefs」)を持つことは、Flowで優れたエクスペリエンスを得るために重要です。本日、flow-typedを紹介します。リポジトリCLIツールは、Flow libdefsを構築、共有、および配布するための新しいワークフローの最初の部分を表しています。

このプロジェクトの目標は、Flowの型推論を輝かせる、Flowの使命に沿ったlibdefsのエコシステムを成長させることです。現実世界のJavaScriptから正確で正確な型を抽出します。 TypeScriptのDefinitelyTypedなどの同様の取り組みから多くのことを学びました。学んだ教訓の一部をFlowエコシステムに取り入れたいと考えています。

このプロジェクトの目的は次のとおりです

プロパティの分散とその他の今後の変更

Flowの次のリリースである0.34には、オブジェクト型にいくつかの重要な変更が含まれます

  • プロパティの分散、
  • デフォルトで不変の辞書型、
  • デフォルトで共変なメソッド型、
  • より柔軟なゲッターとセッター。

Windowsのサポートが来ました!

Flowが64ビットWindowsで正式に利用可能になったことを発表できることを嬉しく思います! Flow v0.30.0以降、リリースごとにWindowsバイナリを公開します。 Windowsバイナリは、GitHubリリースページから直接.zipファイルでダウンロードするか、flow-bin npmパッケージを使用してインストールできます。試してみて、発生した問題を報告してください

![WindowsサポートGIF]({{ site.baseurl }}/static/windows.gif)

FlowをWindows上で動作させるのは容易ではありませんでしたが、Grégoire氏、Çagdas氏、そしてFabrice氏(OCamlPro所属)の多大な努力によって実現しました。

Union型とIntersection型の新しい実装

概要

Flow 0.28より前では、union型とintersection型の実装に深刻なバグがあり、[多数の][gh1759] [根本的な][gh1664] [原因となる][gh1663] [様々な][gh1462] [奇妙な][gh1455] [挙動の][gh1371] [原因と][gh1349] [なって][gh842] [いました][gh815]これらのバグは、[0.28に導入された差分][fotu].

バージョン 0.21.0

昨日、Flow v0.21.0をデプロイしました! いつものように、変更履歴に最も重要な変更点をリストアップしました。 しかし、飛行機の中で眠れないので、いくつかの変更点について詳しく説明してみるのも面白いと思いました! このブログ記事が面白くて読みやすいものになることを願っています!

JSX組み込み要素

JSXを書いている場合、おそらく独自のReactコンポーネントと組み込み要素が混在しているでしょう。 例えば、次のように書くかもしれません。

render() {
return <div><FluffyBunny name="Fifi" /></div>;
}

この例では、FluffyBunnyは自分で書いたReactコンポーネントであり、divはJSX組み込み要素です。 小文字のJSX要素は、ReactとFlowによって組み込み要素と見なされます。 Flow v0.21.0までは、Flowは組み込み要素を無視して、any型を付与していました。 つまり、FlowではJSX組み込み要素に任意のプロパティを設定できました。 Flow v0.21.0は、デフォルトではv0.20.0と同じ動作をします。ただし、JSX組み込み要素を適切に型付けするようにFlowを設定することもできます!

バージョン 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ではなくfoo.js.flowからエクスポートされた型を使用します。

.flowファイルの使い方は、主に2つあると考えています。

Flowを使ったジェネレーターの型付け

Flow 0.14.0には、ジェネレーター関数のサポートが含まれていました。 ジェネレーター関数は、JavaScriptプログラムに独自の機能を提供します。それは、実行を一時停止および再開する機能です。 この種のコントロールは、Flowがすでにサポートしている今後の機能であるasync/awaitへの道を開きます。

バージョン 0.17.0

本日、Flow v0.17.0をリリースしました! まず気づくのは、コマンドラインでのエラーの表示方法を変更したことです。 新しいエラーは次のようになります。

![新しいエラー形式]({{ site.baseurl }}/static/new_error_format_v0_17_0.png)

これにより、コマンドラインユーザーはソースコードを参照せずに多くのエラーを理解できるようになることを願っています。 この形式は今後も改良していく予定ですので、ご意見をお聞かせください! この機能を構築してくれた@franticに感謝します!

このリリースには、他にも多くの機能と修正が含まれています! 完全なリストについては、リリースをご覧ください!

バージョン 0.16.0

金曜日にFlow v0.16.0をリリースしました! リリースに含めたい主要なパフォーマンスの改善と、let/constのサポートが準備できました(@samwgoldmanに改めて感謝します)!

いつものように、変更履歴が大きな変更点をまとめるのに最適です。

バージョン 0.15.0

本日、Flow v0.15.0をリリースしました! 先月は多くの変更があり、すべての貢献者の努力を皆さんに見ていただくことに興奮しています! このリリースに貢献してくれたすべての人に感謝します!

新機能については、変更履歴をご覧ください。