TypeScript: UnionToIntersection - 공통 유형을 교차형 유틸리티로 설정
6860 단어 TypeScript유틸리티 유형유형 프로그래밍
공용 체형을 교차형으로 변환하는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와 같은 보조 함수 정의에 적용, 안전한 코드를 쓸 수 있을 것 같습니다.
Reference
이 문제에 관하여(TypeScript: UnionToIntersection - 공통 유형을 교차형 유틸리티로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suin/items/93eb9c328ee404fdfabc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)