io-ts
基本的にはindex.tsからimportする
他のmoduleからreexportされてる
できること
ランタイム型検査
健全性が破壊されるのは、(ちゃんとやっていれば)IO部分だけなので、という感じでio-tsという命名なんだろうmrsekut.icon
User.decode(maybeUser)みたいに、decode()を使えば良い
通常のts型での定義とここのみが異なるので、projectの他の部分に影響は特にない
.is()を使う
型の自作もできる
自作でISO文字列のDate型を作る例
関連
decodeしたときに出力される文字列をいい感じに整形してくれる
元々、without io-tsでItemという型を定義している状態で、
with io-tsで新しい型Hogeを定義しする時に、
内部でItemを使いたい、って時に、定義できるの?
code:ts
const Hoge = t.type({
aaa: t.string,
item: t.???
})
これが無理だと、依存がでかい型をwith io-tsに移すためには、ほぼ全部書き換えが必要になるのか
あとは、URLのように、built-inの型を用いた定義ができない?
ちなみに、逆は行ける
不満
型定義がひたすらだるい
既存の実装の移行の場合は、割と工数を取っておいたほうが良い
TSのdefaultよりもずっと型安全にできるため、良い機会ではある
試してないけどmrsekut.icon
元のsyntaxよりもごちゃごちゃして見づらい
constで定義することになるので、定義位置に制限が入る
子をfileの上の方に書かないといけない
外部で型を使いたい時に、毎度t.TypeOf<typeof Hoge>と書いてられないから、そこで定義することになると思うけど、そうしても2回定義しないといけないのがめんどいな
code:ts
const Hoge = t.type({..})
type Hoge = t.TypeOf<typeof Hoge>