merge() function
source를 target에 재귀적으로 병합한 새 객체를 반환합니다. 두 입력 모두 수정하지 않습니다.
- 순수 객체(plain object)는 재귀적으로 병합되며,
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 }