LoginSignup
10
6

More than 5 years have passed since last update.

Flow Strictを有効にしてより安全性の高いコーディングを行う

Last updated at Posted at 2018-09-05

Flowを使っていれば型による安全性の高いコーディングが行えることは知っての通りです。

Flow: A Static Type Checker for JavaScript

今回は、Flow Strictについて見ていくことにします。

Flow Strict | Flow

Flow Strictとは何かというと、ファイル単位でより厳密な型チェックをするものです。
例えば、any/Object/Functionなどの曖昧な型を禁止したり、型付されたimport以外を禁止したりできます。

なぜこの挙動がデフォルトでないかというと、既存コードベースに簡単に導入できるように設計されているためです。
なので、Flowを使っているなら基本的にこれを有効化することをオススメします。
これによって、より多くの潜在的なバグを減らしリファクタリングが容易になります。

いくつかの設定可能なルールがありますが、詳しくは公式のページを見てください。
Lint Rule Reference | Flow

いくつかの設定を試してみます

まずはFlowのインストールと設定ファイルの作成をします。

yarn add --dev flow-bin
yarn run flow init

.flowconfig

[ignore]

[include]

[libs]

[lints]

[options]

[strict]

これに以下のように追加します。

[ignore]

[include]

[libs]

[lints]

[options]

[strict]
nonstrict-import
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import
sketchy-null
sketchy-number

有効化

ファイルごとに有効化します。今まで、@flowと書いていた場所に@flow strictと書くだけです。

- // @flow
+ // @flow strict

unclear-type

any, Object, Function のような弱い型を使うとエラーを表示します。

// @flow strict

function x(a: any) {}  // => error

function y(a: Function) {}  // => error

スクリーンショット 2018-09-05 21.01.07.png

sketchy-number

個人的に非常に好きな機能です。

例えばReactで以下のようなコメント数を表示する機能があるとします。

{count && <div>{count} コメント</div>}

countが0の場合、countがfalseと評価されます。
0件のときは表示されてほしくはありませんからね。
ただ残念なことに、これだと0とだけ表示されてしまいます。最悪!

sketchy-numberが有効であればこれを検知します。

スクリーンショット 2018-09-05 21.43.47.png

あとの修正は簡単です。

{count ? <div>{count} コメント</div> : null}

Additionally, note that function parameters are considered const (i.e., treated as if they were declared with const rather than let). This feature is not yet configurable in Flow Strict; it is always on.

常に有効になる機能として関数の引数が常にconst扱いになります。
型があっているので、デフォルトだとエラーにならないですが、Flow Strictだとエラー扱いになります。

// @flow strict

function f(x: number) {
  x = 1 // => error
}

スクリーンショット 2018-09-05 22.07.33.png

まとめ

flowを使っているならば有効化することをオススメします。
また、ドキュメントにも将来的にこれらの機能がデフォルトの挙動になる可能性があるとのことなので期待したいです。

Flow Strict | Flow

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6