generated at
io-ts
内部でfp-tsを使っている
開発者はGiulio Canti

基本的には index.ts からimportする
他のmoduleからreexportされてる



できること
ランタイム型検査
健全性が破壊されるのは、(ちゃんとやっていれば)IO部分だけなので、という感じでio-tsという命名なんだろうmrsekut
The ideaに書いてる
User.decode(maybeUser) みたいに、 decode() を使えば良い
通常のts型での定義とここのみが異なるので、projectの他の部分に影響は特にない
Type Predicatesを自動で生成
.is() を使う
newtype-tsを使っても良いかもmrsekut



型の自作もできる
自作でISO文字列のDate型を作る例
ちなみにDate型はio-ts-typesにもある


関連
decodeしたときに出力される文字列をいい感じに整形してくれる
PathReporterとは何が違うのか #??




元々、without io-tsで Item という型を定義している状態で、
with io-tsで新しい型 Hoge を定義しする時に、
内部で Item を使いたい、って時に、定義できるの?
ts
const Hoge = t.type({ aaa: t.string, item: t.??? })
これが無理だと、依存がでかい型をwith io-tsに移すためには、ほぼ全部書き換えが必要になるのか
あとは、 URL のように、built-inの型を用いた定義ができない?
ちなみに、逆は行ける



不満
型定義がひたすらだるい
既存の実装の移行の場合は、割と工数を取っておいたほうが良い
TSのdefaultよりもずっと型安全にできるため、良い機会ではある
変換するやつもあるっぽい
試してないけどmrsekut
元のsyntaxよりもごちゃごちゃして見づらい
const で定義することになるので、定義位置に制限が入る
子をfileの上の方に書かないといけない
外部で型を使いたい時に、毎度 t.TypeOf<typeof Hoge> と書いてられないから、そこで定義することになると思うけど、そうしても2回定義しないといけないのがめんどいな
ts
const Hoge = t.type({..}) type Hoge = t.TypeOf<typeof Hoge>