cloneDeep() function
value のディープクローンを作成します。
対応型: プリミティブ型、Array、プレーンオブジェクト(Object.create(null) を含む)、Date、RegExp(lastIndex を保持)、Map、Set、ArrayBuffer、TypedArray、DataView。クラスインスタンスはプロトタイプを保持したまま、列挙可能な自身のプロパティ(文字列・シンボルキー)がコピーされます。循環参照をサポートします。
structuredClone とは異なり、関数は例外を投げずに参照が維持され、クラスインスタンスのプロトタイプが保持されます。WeakMap/WeakSet/Promise はクローンできないため、そのまま返されます。
Signature:
typescript
function cloneDeep<T>(value: T): T;Example
ts
const obj = { a: 1, b: { c: 2 }, d: [1, 2, 3] };
const cloned = cloneDeep(obj);
cloned.b === obj.b; // false
cloned.d === obj.d; // false
// 循環参照
const circular = { a: 1, self: null as unknown };
circular.self = circular;
const clonedCircular = cloneDeep(circular);
clonedCircular.self === clonedCircular; // true
// クラスインスタンスはプロトタイプを維持します
class Point {
constructor(public x: number) {}
}
cloneDeep(new Point(1)) instanceof Point; // true