merge() function
source を target に再帰的にマージした新しいオブジェクトを返します。どちらの入力も変更されません。
- プレーンオブジェクトは再帰的にマージされ、
sourceのプロパティが優先されます。 - 配列はインデックス単位でマージされます(
[1, 2, 3]と[9]をマージすると[9, 2, 3])。 sourceのundefinedはtargetの既存の値を上書きしません。- その他の値(Date、Map、Set、クラスインスタンスなど)はそのまま
targetの値を置き換え、コンテナの種類が異なる場合はsourceがtargetを置き換えます。 __proto__キーは無視されるため、信頼できない入力をマージしてもプロトタイプチェーンは汚染されません。- 循環構造はサポートされません。
Signature:
typescript
function merge<T extends object, S extends object>(target: T, source: S): T & S;
function merge<T extends object>(
target: T,
): <S extends object>(source: S) => T & S;Example
ts
merge({ a: 1, b: { c: 2 } }, { b: { d: 3 } }); // { a: 1, b: { c: 2, d: 3 } }
merge({ a: [1, 2, 3] }, { a: [9] }); // { a: [9, 2, 3] }
merge({ a: 1 }, { a: undefined }); // { a: 1 }
// pipeと共に使用 - パイプで渡されたオブジェクトが指定したデフォルト値より優先されます
pipe({ port: 3000 }, merge({ host: "localhost", port: 80 })); // { host: "localhost", port: 3000 }