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(),
})