TL;DR

Effect で独自のエラーを定義するためのヘルパー。クラスとして継承して使う。

仕組み

class FetchError extends Data.TaggedError("FetchError")<{
  customMessage: string
}> {}

Data.TaggedError の引数("FetchError")は、エラーを識別する _tag フィールドの値になる。型パラメータ({ customMessage: string })には、インスタンスを作るときに必要なデータを書く。_tag があるので、Effect.catchTag や Effect.catchTags でエラーを区別して処理できる。

例

インスタンスは通常のクラスと同じく new で作る。Effect.tryPromise の catch で返せば、失敗を独自のエラーとして型に載せられる。

const fetchRequest = Effect.tryPromise({
  try: () => fetch("https://pokeapi.co/api/v2/pokemon/garchomp"),
  catch: (): FetchError => new FetchError(),
})

関連

出典