オブジェクトを弱参照で保持するコレクション。GCを妨げない
// ── WeakMap: キーが GC(ガベージコレクション)される特殊な Map ─
// キーがどこからも参照されなくなると、自動でエントリが削除される
// → メモリリークを防げる(DOM 要素などに関連データを紐付けるのに最適)
const cache = new WeakMap<object, string>();
let element = document.querySelector('#app')!; // DOM 要素をキーに
cache.set(element, '計算結果データ');
console.log(cache.get(element)); // '計算結果データ'
// element が削除されると cache からも自動で削除される
// ⚠️ 制限: キーはオブジェクトのみ(プリミティブ値は使えない)
// ⚠️ 制限: size プロパティがない / forEach が使えない
// ── WeakSet: 値が GC される特殊な Set ────────────────
// オブジェクトが「処理済みかどうか」を追跡するのに使う
const processed = new WeakSet<object>();
async function processItem(item: object) {
if (processed.has(item)) {
return; // 既に処理済みなのでスキップ
}
// ... 処理 ...
processed.add(item); // 処理済みとしてマーク
// item が削除されると processed からも自動で削除される
}メモリリークを防ぎながらオブジェクトにメタデータを付与したい場合に使う。iterableでないためfor...ofは使えない。