Flow型情報を利用して変数を初期化します。
テストやstorybookなどで別ファイルで読み込むときに活用できます。
s2sについては、すでにいくつか記事を書いたのでそちらを参照してください。
さよならボイラープレート。s2sによる高速reduxアプリケーション構築 - Qiita
すぐ動作確認できるサンプルがあるので、導入についてそれを見て下さい。
How to work?
Flowは、エディタなどで利用可能なように、カーソルの位置の型情報がCLIから取得可能です。
flow type-at-pos --json path/to/file row column
という形でカーソルの位置の型情報がjsonで取得できます。
しかし、jsonといっても、json5です(これに気づかずなぜかパースできなくて悩まされました)
エディタでは型情報の表示に利用しますが、今回はコードの生成に利用します。
s2sのプラグインでは、以下のような手段でコードを生成します。
- babylonで変数宣言とその型の位置を取得
- Flowで型情報(JSON)の取得
- その型のASTを取得するために
type X = 取得したjson
という偽のコードを生成し、それをbabylonでパース - ASTをtravaseし
TypeAlias
の右辺を取得 - それをオブジェクトに変換し、再帰的にそれぞれの型の初期化値に置き換え
何故か異常に複雑になってしまいましたが、要は取得した型をnumber
なら0
、string
なら""
、bool
ならfalse
という形で置き換えてるだけです。
まとめ
何かありましたら、コメント欄またはTwitterで議論しましょう。
s2sに本当に小さいサンプルを追加した。型情報を使った変数の初期化。設定ファイルは10行以下。とりあえず試すのにオススメ https://t.co/5rep99nOQn pic.twitter.com/8aYRmgpRgL
— あかめ@無職.js (@akameco) October 31, 2017
https://t.co/YWMQpeFuqC を使って型が異なる場合のみ初期化させる。これで本当に小さくs2sを導入できる pic.twitter.com/7QBVHS9zOn
— あかめ@無職.js (@akameco) October 25, 2017
reducer のテストや storybook 書く時に強力でありがたい。type から faker の生成https://t.co/s9ZGuRfUBw
— えるざっぷ (@_elzup_) November 12, 2017