m-match
作ったmiyamonz.icon
$ npm i m-match
名前はminimal, とmodulerからmを取ってみた
モチベーション
部分的にほしいが、メソッドチェーンスタイルだと欲しいところだけを取り出せないじゃん
pattern matchが欲しいのではなく、型安全なif thenの式だけがほしい
code:ts
if(isHoge(s)) {
return valueForHoge
else {
// ここでsはisHoge以外になってる
}
TSではtype guradがあるので、if文を書くと良い感じに型が分岐できるが、これを式にしたい。 matchしてたら何かを返して、matchしてなかったら入力を絞りたい
メソッドチェーンで登場する個別のパーツを分解して定義すると良いんじゃないの?ということで作ってみた
https://gyazo.com/027e355618b0ca697e0c06b64d6a8e74
https://gyazo.com/3a8897eaea0bb8338bb14fa561cd774e
---
検討メモ
現状match,when,reduceMatchers, exhaustiveしかない
reduceMatchers, 名前を簡単にしてreduceにしてもいいだろうか?
あるいは、matchの引数で配列を受け取って、それをreduceMatcher相当とするのもいいか
P.selectはちょっとむずいか
パターンマッチにおけるパターンの記述って、valibotとかzodのスキーマとやってること同じでは?
じゃあvalibotのschema使って実装したほうがシンプルだしきれいじゃん
schema.parseを渡すか、schema渡せるようにすればいいだけ
あとP.selectとかだけうまい方法を考えればts-patternを置換えられるんじゃないか
schemaに対して名前を付与できるようにして、parseの外側に名前の部分を取り出す仕組みを入れれば良い