Rhyztech blog

flowの覚書(flow 0.19.0)

tech

flow のバイナリ自体は型チェッカーだが、本質は JavaScript に静的型付けなコーディングスタイルを提供すること。 JavaScript の拡張言語と考えてもらえばよい。 実際の開発では babel のプラグインとして設定し、babel のコンパイル時に型情報は消える。

flow は JavaScript の拡張言語として、静的型付けのコーディングスタイルを提供する。 そして、チェックする対象のソースコードに/* @flow */をつければ良い。 例えば、関数 double は number 型の値を引数に取ることを宣言できる。

/* @flow */

function double(x: number) {
  return x * 2
}

double(2)

関数 double の引数を string 型にした場合、flow の型チェックでエラーが出力される。

/* @flow */

function double(x: string) {
  return x * 2;
}

double('Hello world');

>flow check
  7:   return x * 2;
              ^ string. This type is incompatible with
  7:   return x * 2;
              ^^^^^ number

flow のチェック自体は型情報を付けなくても賢くチェックする。 例えば次の場合は、number 型に length プロパティがないとエラーが出力される。

/* @flow */

function double(x) {
  return x.length * 2;
}

double(3);

>flow check
  7:   return x.length * 2;
                ^^^^^^ property `length`. Property not found in
  7:   return x.length * 2;
              ^ Number

その他、flow でできること

  • 変数、関数の引数、戻り値、クラス変数に型をつける
  • 型情報をパラメータ化してクラス渡せるジェネリクス(Array とか
  • 複雑な型情報を定義するタイプエイリアス
  • 型チェック、null チェックによる静的解析を行う

あとは、flow のホームページを読んでよ。 検索するとミュージシャンの方が出るのでリンクを貼っておくよ。

http://flowtype.org/

Copyright 2024, rhyztech. All Rights Reserved.