はじめに
ts-pattern
のP.not
を完全に理解しよう
P.not はどんなときに使うのか
任意のインプットに対し、複数の型定義を許容する場合
特定の型定義に対して異なるアウトプットを表現する関数を定義することができる。
* 以下は公式の例
boolean
またはnumber
の型定義を持ったInput
に対して、
Input
がboolean
でないときはInput
でやってきたnumber
を返す。
Input
がboolean
のときはtrue
であれば1
, false
のときは0
を返す。
以下の例では
数値の型に返す関数だが、関数の型定義を行っていないためそれ以外の値を返すことも可能。
import { match, P } from 'ts-pattern';
type Input = boolean | number;
const toNumber = (input: Input) =>
match(input)
.with(P.not(P.boolean), (n) => n) // n: number
.with(true, () => 1)
.with(false, () => 0)
.exhaustive();
console.log(toNumber(2));
// => 2
console.log(toNumber(true));
// => 1
さいごに
自分はts-pattern
を基本enum
のインプットに対してしか使う場面がなかったので、
出会うことがなかったが、型定義を超越して扱えるということがわかったので、
typeScript
の意義を履き違えないようにしながら上手く活用していきたい。