TypeError: X is not iterable
イテラブルでないオブジェクトに対してfor...ofや分割代入を使用した際に発生するTypeError
概要
TypeError: X is not iterable は、for...of ループや分割代入、スプレッド構文などでイテラブルプロトコルを持たないオブジェクトを使用した際に発生するランタイムエラーです。配列やMapなどのイテラブルオブジェクトが期待される場所に、通常のオブジェクトやnull/undefinedが渡されると発生します。
エラーメッセージ
TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))
TypeError: null is not iterable (cannot read property Symbol(Symbol.iterator))
TypeError: obj is not iterable
原因
- 通常のオブジェクトにfor…ofを使用: プレーンオブジェクトはイテラブルではない
- null/undefinedに対する分割代入: APIレスポンスがnullの場合など
- 配列を期待する場所にオブジェクトを渡している: 関数の戻り値の型ミス
- 非同期データの未ロード状態: useStateの初期値がundefinedのまま反復処理
- Map/Set以外のオブジェクトへのスプレッド構文: イテラブルでない値の展開
解決策
1. オブジェクトの反復にはObject.entries/keysを使う
| |
2. Array.isArrayで配列チェック
| |
3. 分割代入にデフォルト値を設定
| |
4. TypeScriptの型ガードで安全にする
| |
5. Reactでの安全な配列レンダリング
| |
関連エラー
JavaScript の他のエラー
この記事は役に立ちましたか?