Closed1
TypeScript でクラスを含むオブジェクトをディープコピーしたい
JSON.parse(JSON.stringify(obj))
だと class 構文に対応できないため、ディープコピーを書く必要がある。
雑な実装だけどこれで行けるっぽい。Object.assign する際にさらに search を呼び出す必要があることに注意。
export const deepCopy = <T>(root: T) => {
const search = (obj: unknown): unknown => {
if (obj === null) {
return null;
}
if (Array.isArray(obj)) {
return obj.map((item) => search(item));
}
if (typeof obj === "object") {
return Object.assign(
Object.create(Object.getPrototypeOf(obj)),
Object.entries(obj).reduce(
(previous, [key, value]) => ({ ...previous, [key]: search(value) }),
{}
)
);
}
return obj;
};
return search(root) as T;
};
このスクラップは2022/08/24にクローズされました