programing

타이프스크립트에서 오브젝트 속성을 결합하는 방법

goodcopy 2023. 3. 19. 21:14
반응형

타이프스크립트에서 오브젝트 속성을 결합하는 방법

이 작업을 수행하는 가장 좋은 방법을 알고 싶습니다. 예를 들어 두 개의 물체가 있다고 가정해 보십시오.

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

반응형