flow
reactjs
React
is_mgmt_dept

flowとは

javascriptの型チェックライブラリ。

flowの型定義ファイルの取得

package.jsonに記載された各ライブラリについての、flowの型定義ファイルを取得する。
取得した型定義ファイルはflow-typedディレクトリ内に格納される。
型定義ファイルが無い場合、ライブラリをimportしたときにflowの型チェックエラーとなる。

yarn global add flow-bin ※初回のみ実施
.\node_modules\.bin\flow-typed install

flowの適用

ソースの冒頭に以下のコメントを記述するとflowの型チェックが有効となる。

// @flow

ReactコンポーネントのPropsをflowでチェックする

type Propsの中にPropsの型を定義する。

import TestClass as './TestClass';

type Props = {
  name: string,
  age?: string,
  action: any,
  ...$Exact<Props>,
  testClass: TestClass,
};

const Sample = (props: Props) => (
  <div>
    {props.name}
    <button onClick={() => props.action()}>Button<\button>
    <ChildSample {...props} />
    {props.testClass.age()}
  </div>
);

export default Sample;
  • functionはany型
  • propsの展開({...props})は、...$Exact型
  • 独自オブジェクト(例で言うTestClass)は、オブジェクトをimportして型定義する。
  • 必須でないプロパティは、age?のように末尾に?を付ける。
  • コンポーネントの引数に(props: Props)と書いて、Props型とprops変数を紐づける。

eslintの設定

eslintを使用している場合、flowでチェックエラーとならないよう、.eslintrcを修正する。

.eslintrc
  "extends": [
    ・・・
    "plugin:flowtype/recommended" ←追加
  ],
  "plugins": [
    "flowtype"
  ],
  "rules": {
    "flowtype/no-types-missing-file-annotation": 0,
    "flowtype/define-flow-type": 1,
    "flowtype/use-flow-type": 1,
    "react/prop-types": [off],
    "react/default-props-match-prop-types": [off]
  },