Skip to content

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

Open Source Code

Released under the Apache-2.0 License.