🦵

ts-patternで複数のパターンのマッチングをする

2024/04/25に公開

ts-pattern

https://github.com/gvergnaud/ts-pattern

P.unionを使った複数型のマッチング

P.unionを使用することで、複数のパターンに一致するマッチングを行うことができます。
以下の例では、P.unionに並べたいずれかの型に一致するとき、マッチします。

animal.ts
import { match } from 'ts-pattern';

type Vehicle = 
  | { type: 'car'; brand: string; wheels: number }
  | { type: 'bicycle'; brand: string; wheels: number }
  | { type: 'airplane'; brand: string; engines: number };

const myVehicle: Vehicle = { type: 'car', brand: 'Toyota', wheels: 4 };

const vehicleDescription = match(myVehicle)
  .with({ type: P.union('car','bicycle') }, (v) => `タイヤは${v.wheels}つついています`)
  .otherwise('車でも自転車でもありません'); 

console.log(vehicleDescription);

上記のコードでは、typeがcarまたは、bicycleに一致する場合に タイヤは${v.wheels}つついていますを返します
その他の型に一致する場合は、車でも自転車でもありませんを返します。

終わりに

複数のパターンにマッチングするときに実行したいロジックや引数を使うことは時々あると思うので便利だと思いました。
また、型の受け皿を作ることができるので、
型の種類がいくつかあったり、型が固まっていない場合に使うとよりよいと思います。

Discussion