1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

'error''は 'unknown' 型です。

Posted at

はじめに

アプリ開発をしていてtry-catch文のcatch(error)としていると、以下のようなエラーが出ました。


catch (error) {
setError(error.message);    //'error''は 'unknown' 型です。
}

問題

調べてみると、Typescript4.4以降にcatch句のerror変数はunknown型として扱われるようになったことが原因のようです。

これはuseUnknownInCatchVariablesフラグが導入されたことに関係があるようです。strictモードを有効にしている場合、このオプションが自動的に有効になるみたいです。
これが有効になっていると、catch句の変数が従来はany型だったのが、unknow型になってしまうみたいです。

今回のコードは、catchブロック内でerrorを使用する際に、その型が不明確なため、error.messageにアクセスできないというエラーです。

解決方法

以下のようにコードを修正することで今回のエラーは解決できました。

if (error instanceof Error) {
setError(error.message);
} else {
setError('An unknown error occurred');
}

errorがErrorインスタンスであるかどうかチェックをするようにします。
もしErrorインスタンスの場合は、error.messageを使用できます。
else文を置いて、Errorインスタンス出ない場合のエラーメッセージを対応することで、予期しないエラーにも対応ができるようになりました。

おわりに

今までcatch(error)は自動的に書いていることが多かったのですが、今回のエラーによって型安全性向上のためにより厳格なエラーハンドリング方法を知るきっかけになりました。
皆様の参考になれば幸いです!

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?