はじめに
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の意義を履き違えないようにしながら上手く活用していきたい。