0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

effect-tsでキャッチ系のエラー対応できていないものの対応

0
Last updated at Posted at 2025-11-16

前回型情報がなくなってcontextがunknownになる場合があることを発見した。
それをなんとかして対応する方法があるのかどうか調査する

前回

前回わかったこと

表では下記変換を実施している

Effect.Effect<never, FailMessage, never> | Effect.Effect<number, never, never>
=>
Effect.Effect<number, FailMessage, never>
関数名 programの型 defect_resultの型 正常動作する 静的解析エラー
catch Effect.Effect<void, never, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<Cause.UnknownException>
(エラーが出ない)
catchAll Effect.Effect<void, never, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<Cause.UnknownException>
(エラーが出ない)
catchAllCause Effect.Effect<void, Cause.NoSuchElementException, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<Cause.UnknownException>
(エラーが出ない)
catchAllDefect Effect.Effect<void, Cause.UnknownException, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<unknown>
(エラーが出ない)
catchIf Effect.Effect<void, Cause.UnknownException, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<Cause.UnknownException>
(エラーが出ない)
catchSome Effect.Effect<void, Cause.UnknownException, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<Cause.UnknownException>
(エラーが出ない)
catchSomeCause Effect.Effect<void, Cause.UnknownException, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<Cause.UnknownException>
(エラーが出ない)
catchSomeDefect Effect.Effect<void, Cause.UnknownException, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<unknown>
(エラーが出ない)
catchTag Effect.Effect<void, never, never> Effect.Effect<number, FailMessage, never> | Cause.Cause<Cause.UnknownException>
(エラーが出ない)
catchTags Effect.Effect<void, never, unknown> Effect.Effect<number, FailMessage, never> | Cause.Cause<unknown>
(エラーが出る)

以下は動作しない

  • catchAllDefect
  • catchSomeDefect

以下は動作するが、エラーが表示される

  • catchTags

catchAllDefect と catchSomeDefect を復帰させる方法はあるのか?

以下のようにすると、エラーを取得できる可能性が出てくるが、
型情報が壊れているため、その後も何度もCause.Cause<unknown>対応する必要がある
そのため、catchAllDefect と catchSomeDefect は使用しないほうがよい

  const _defect_result = tryEffect.pipe(
    Effect.catchAllDefect((e) => {
      return Effect.cause(Effect.fail(e))
    })
  )
  const defect_result = yield* Effect.try(() => _defect_result)

catchTags はなぜ エラーが表示されるのか?

Effect.Effect<void, never, unknown> のようにcontextが unknownだと型情報が壊れてしまった判定になる。
そのため、エラーが出てしまう。

※catchAllDefect と catchSomeDefect も同じように unknownになるべきだが、なっていない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?