TypeError: Cannot read properties of undefined — 原因と解決方法

エラー内容

TypeError: Cannot read properties of undefined (reading 'xxx')

JavaScriptで最も頻繁に遭遇するエラーの一つ。undefined な値のプロパティにアクセスしようとすると発生する。

よくある原因

1. APIレスポンスのネスト構造

const data = await fetch('/api/users').then(r => r.json());
// data.users が undefined の場合
console.log(data.users.length); // TypeError!

解決方法: オプショナルチェーンを使う。

console.log(data.users?.length ?? 0);

2. 配列の範囲外アクセス

const items = [1, 2, 3];
console.log(items[5].toString()); // TypeError!

解決方法: 存在チェックを行う。

const item = items[5];
if (item !== undefined) {
  console.log(item.toString());
}

3. 非同期処理のタイミング

Reactコンポーネントでstateが初期化される前にレンダリングされるケース。

const [user, setUser] = useState<User>();

// 初回レンダリング時に user は undefined
return <div>{user.name}</div>; // TypeError!

解決方法: ガード句またはローディング状態を使う。

if (!user) return <div>Loading...</div>;
return <div>{user.name}</div>;

まとめ

  • ?. (オプショナルチェーン) と ?? (Null合体演算子) を活用する
  • TypeScriptの strictNullChecks を有効にして型レベルで防ぐ
  • APIレスポンスは必ずバリデーションしてからアクセスする