이 작업을 수행하는 가장 좋은 방법을 알고 싶습니다. 두 개의 개체가 있다고 가정합니다.
var objectA = {
propertyA: 1,
propertyB: 2
...
propertyM: 13
}
var objectB = {
propertyN: 14,
propertyO: 15
...
propertyZ: 26
}
objectC를 만든 경우
var objectC = Object.assign(objectA, objectB);
objectC를 선언 / 설명하여 컴파일러 / IDE가 objectA와 objectB의 속성을 모두 가지고 있음을 어떻게 알 수 있습니까?
objectA 및 objectB에 대한 인터페이스를 정의 할 필요없이 방법을 찾고 싶습니다. 동일한 속성에 대한 선언 및 정의 / 평가를 두 번 작성하고 싶지 않습니다. 이 중복성은 객체에 너무 많은 속성이있는 경우 중요합니다.
(기존 객체의 인터페이스 / 유형을 추출 할 수있는 연산자가 있습니까?)
가능할까요?
답변
다음과 같이 트릭을 수행해야합니다.
var objectA = {
propertyA: 1,
propertyB: 2,
.
. // more properties here
.
propertyM: 13
};
var objectB = {
propertyN: 14,
propertyO: 15,
.
. // more properties here
.
propertyZ: 26
};
var objectC = {...objectA, ...objectB}; // this is the answer
var a = objectC.propertyA;
var n = objectC.propertyN;
이 기사를 기반으로 : https://blog.mariusschulz.com/2016/12/23/typescript-2-1-object-rest-and-spread
또한 분해에서 변수의 순서가 중요합니다. 다음을 고려하세요:
var objectA = {
propertyA: 1,
propertyB: 2, // same property exists in objectB
propertyC: 3
};
var objectB = {
propertyX: 'a',
propertyB: 'b', // same property exists in objectA
propertyZ: 'c'
};
// objectB will override existing properties, with the same name,
// from the decomposition of objectA
var objectC = {...objectA, ...objectB};
// result: 'b'
console.log(objectC.propertyB);
// objectA will override existing properties, with the same name,
// from the decomposition of objectB
var objectD = {...objectB, ...objectA};
// result: '2'
console.log(objectD.propertyB);
답변
그래서 컴파일러 / IDE는 objectA와 objectB의 속성을 모두 가지고 있다는 것을 압니까?
교차 유형 + 제네릭을 사용하십시오. 예 : 여기에서
/**
* Quick and dirty shallow extend
*/
export function extend<A>(a: A): A;
export function extend<A, B>(a: A, b: B): A & B;
export function extend<A, B, C>(a: A, b: B, c: C): A & B & C;
export function extend<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D;
export function extend(...args: any[]): any {
const newObj = {};
for (const obj of args) {
for (const key in obj) {
//copy all the fields
newObj[key] = obj[key];
}
}
return newObj;
};
더
둘 다 여기에 언급되어 있습니다 : https://basarat.gitbooks.io/typescript/content/docs/types/type-system.html
답변
(기존 객체의 인터페이스 / 타입을 추출 할 수있는 연산자가 있습니까? 가능합니까?)
typeof 로 가야합니다 .
type typeA = typeof objectA;
type typeB = typeof objectB;
그것들을 병합하기 위해 이미 지적한 바사 랏으로 교차 작업을 사용할 수 있습니다.
type typeC = typeA & typeB
답변
Typescript 확산 연산자를 사용 하여 Javascript Object.assign ()로 변환합니다.
딥 트리 오브젝트 병합이 필요한 경우 최고의 글로벌 패키지 의 변경 기능을 사용할 수 있습니다.
답변
이 시도..
const person = { name: 'TRilok', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };
const attributes = { handsomeness: 'Extreme', hair: 'Brown', eyes: 'Blue' };
const summary = {...person, ...tools, ...attributes};