타이프스크립트에서 오브젝트 속성을 결합하는 방법
이 작업을 수행하는 가장 좋은 방법을 알고 싶습니다. 예를 들어 두 개의 물체가 있다고 가정해 보십시오.
var objectA = {
propertyA: 1,
propertyB: 2
...
propertyM: 13
}
var objectB = {
propertyN: 14,
propertyO: 15
...
propertyZ: 26
}
objectC가 생성되는 경우
var objectC = Object.assign(objectA, objectB);
컴파일러/IDE가 오브젝트A와 오브젝트B의 속성을 모두 가지고 있는 것을 알 수 있도록 오브젝트C를 선언/기술하려면 어떻게 해야 합니까?
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);
(기존 오브젝트의 인터페이스/유형을 추출할 수 있는 오퍼레이터가 있습니까?가능합니까?)
당신은 타입 오브를 택해야 해요.
type typeA = typeof objectA;
type typeB = typeof objectB;
이들을 병합하려면 이미 지적된 바와 같이 교차 연산을 사용할 수 있습니다.
type typeC = typeA & typeB
컴파일러/IDE는 오브젝트A와 오브젝트B의 속성을 모두 가지고 있는 것을 알 수 있습니까?
교차 유형 + 제네릭을 사용합니다.예: 여기서부터
/**
* 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에 기재되어 있습니다.
이거 먹어봐..
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};
Typescript 확산 연산자를 사용하여 Javascript Object.assign()으로 변환합니다.
딥 트리 오브젝트 Marge가 필요한 경우 best-global 패키지의 함수를 변경할 수 있습니다.
Lodash에는 객체를 결합하는 "확장" 기능이 있으며 Typescircuit는 새 객체가 예상한 유형을 가지고 있음을 알 수 있습니다.
const a = { one: 1, two: 2 };
const b = { three: 3, four: 4 };
const c = lodash.extend(a, b);
// c: { one: 1, two: 2, three: 3, four: 4 }
언급URL : https://stackoverflow.com/questions/37042602/how-to-combine-object-properties-in-typescript
'programing' 카테고리의 다른 글
ASP 버튼(시스템)의 포스트백을 무효로 하는 방법.Web.UI. WebControls.버튼) (0) | 2023.03.19 |
---|---|
Keycloak 각도 'Access-Control-Allow-Origin' 헤더가 없습니다. (0) | 2023.03.19 |
Oracle에서 테이블 크기를 계산하는 방법 (0) | 2023.03.19 |
재스민:비동기 콜백이 재스민에 의해 지정된 타임아웃 내에 호출되지 않았습니다.디폴트_타임아웃_간격 (0) | 2023.03.19 |
PHP json_decode()는 유효한 것처럼 보이는 JSON을 사용하여 NULL을 반환합니까? (0) | 2023.03.19 |