고급 TypeScript 연습 - 답변 10
Note - if you don't recall what means - type level function please take a moment for reading - .
솔루션 1 - 매핑된 유형
type Merge<A, B> = {
[K in keyof A | keyof B]:
K extends keyof B ? B[K] :
K extends keyof A ? A[K] : never
}
여기서 우리가 하고 있는 것은 mapped type 인 Merge 함수를 생성하는 것입니다. 매핑된 유형을 사용하면 한 유형을 반복하고 다른 유형으로 매핑할 수 있습니다.
[K in keyof A | keyof B]
- A 및 B 유형의 키 합집합을 반복합니다. 합집합은 두 유형 모두에서 반복되는 키를 제거하므로 두 번 반복할 필요가 없습니다K extends keyof B ? B[K] :
K extends keyof A ? A[K] : never
- 현재 키가 유형 B의 키에 속하는지 확인하기 위해 conditional type을 사용하고, 그렇지 않은 경우 유형 A에 속하는지 확인하고, 이들 중 어느 것에도 속하지 않으면 불가능한 것을 확인합니다. never
로 대체합니다. Note pay attention that we check firstly B type, so if the key is in B, we take value from B, it means we will overwrite eventual value from type A. Don't worry though, that was the requirement of the task.
Note I said that there is no possibility that key will not be either in A or B, because we iterate over
keyof A | keyof B
, so there is no option that key will not belong to any of them.
솔루션 2 - 생략 사용
type Merge<A, B> = Omit<A, keyof B> & B;
예, 그것이 전체 솔루션입니다 😉. TypeScript 유형 수준 표준 라이브러리는 솔루션 1에서 했던 것처럼 실제로 매핑된 유형인 Omit과 같은 함수를 제공합니다. 그렇다면 사용할 준비가 된 함수가 있다면 사용하지 않는 이유는 무엇입니까?
Omit<A, keyof B>
B에 없는 A의 키만 포함하는 유형을 만듭니다Omit<A, keyof B> & B
- A에서 제거된 B의 키로 B와 교차가 없는 이미 생성된 유형에 B 유형을 병합합니다. 결과적으로 우리는 이전 솔루션과 동일한 작업을 수행했지만 한 줄의 코드로 수행했습니다.
에 대한 훌륭한 답변에 대해 , 및 기타 사용자에게 특별한 감사를 드립니다. 두 솔루션in the playground을 모두 찾을 수 있습니다.
이 시리즈는 계속됩니다. 고급 TypeScript의 새롭고 흥미로운 질문에 대해 알고 싶다면 및 에서 저를 팔로우하십시오.
Reference
이 문제에 관하여(고급 TypeScript 연습 - 답변 10), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/macsikora/advanced-typescript-exercises-answer-10-2kd2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)