Skip to content

merge() function

sourcetarget に再帰的にマージした新しいオブジェクトを返します。どちらの入力も変更されません。

  • プレーンオブジェクトは再帰的にマージされ、source のプロパティが優先されます。
  • 配列はインデックス単位でマージされます([1, 2, 3][9] をマージすると [9, 2, 3])。
  • sourceundefinedtarget の既存の値を上書きしません。
  • その他の値(Date、Map、Set、クラスインスタンスなど)はそのまま target の値を置き換え、コンテナの種類が異なる場合は sourcetarget を置き換えます。
  • __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 }

Open Source Code

Released under the Apache-2.0 License.