TypeScript: UnionToIntersection - 공통 유형을 교차형 유틸리티로 설정

본고에서 저는 TypeScript에서 공유 체형을'상교 유형'으로 변형시키는 mapped types를 소개할 것입니다.

공용 체형을 교차형으로 변환하는mapped types

type UnionToIntersection<U> =
  (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
출처는Typescript Convert Union to intersection - Stack Overflow.위의 부분은 Stack Overflow의 대답에서 원문의 어머니를 인용한 것이므로 답변 중인 원본 코드를 다른 곳에서 사용할 수 있습니까? -스택 넘침 메타데이터 허가증을 참조하십시오.

사용 방법


우선 교차형을 원하는 공용 체형을 준비한다.여기에 Either 타입이 준비되어 있습니다.{a: number} 또는 {b: number} 중 하나만 충족시키면 된다.
type Either = {a: number} | {b: number}
신중을 기하기 위해서 먼저 공용체형의 성질을 확인해 보세요.
const a: Either = {} // Compile error: Property 'a' is missing 
const b: Either = {a: 1}
const c: Either = {b: 1}
const d: Either = {a:1, b: 1}
위의 코드에서 a만 형식을 만족시킬 수 없기 때문에 컴파일 오류가 발생할 수 있습니다.
다음은 아까 것UnionToIntersection으로 위Either에서 연성{a: number} & {b: number}하고 싶어요.여기 Both 모델입니다.
type Both = UnionToIntersection<Either>
교차형 여부를 확인합니다.
const p: Both = {} // Compile error: Property 'a' is missing 
const q: Both = {a: 1} // Compile error: Property 'b' is missing
const r: Both = {b: 1} // Compile error: Property 'a' is missing
const s: Both = {a:1, b: 1}
위의 코드s를 제외하고는 컴파일이 잘못되었습니다.교차형인 것 같아요.
이 검증을 시도하고 싶은 사람은 TypeScript playground 중에서 시도할 수 있다.

해설


많은 실수를 시도했지만 왜 행동했는지 이해할 수 없었다.설명할 수 있는 사람, 있으면 알려주세요
uhyo씨가 평어로 해설했습니다.

실례


@kahirokunn 저에게 이 기교의 실용적인 예를 가르쳐 주세요.Vuex에 대한 mapComputed와 같은 보조 함수 정의에 적용, 안전한 코드를 쓸 수 있을 것 같습니다.

좋은 웹페이지 즐겨찾기