TupleToUnion 및 UnionToIntersection
프로그램을 통해 튜플과 유니언 사이를 변환합니다.
TupleToUnion 및 UnionToIntersection은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
TupleToUnion: 개념
TupleToUnion은 튜플 타입을 요소 타입의 공용체로 변환합니다. 개별 타입으로 튜플을 만드는 것과 반대되는 작업입니다.
type TupleToUnion<T extends readonly any[]> = T[number];
type A = TupleToUnion<[string, number, boolean]>; // string | number | boolean숫자 인덱스로 접근하는 방식
number로 튜플을 인덱싱하면 모든 숫자 인덱스에 한 번에 접근하며, TypeScript에서는 이를 요소 타입의 공용체로 표현합니다.
type Tuple = [string, number, boolean];
type Elements = Tuple[number]; // string | number | boolean상수 배열과 함께 사용하는 TupleToUnion
as const 배열과 결합하여 값 배열에서 공용체를 도출합니다.
const COLORS = ["red", "green", "blue"] as const;
type Color = typeof COLORS[number]; // "red" | "green" | "blue"UnionToIntersection: 개념
공용체를 교집합으로 변환하는 작업은 더 어렵습니다. 모든 멤버를 수집하려면 함수 타입과 분배 조건부 타입이 필요합니다.
type UnionToIntersection<U> =
(U extends any ? (x: U) => void : never) extends (x: infer I) => void
? I
: never;함수 기법이 작동하는 이유
공용체 멤버에 분배하면 각 멤버가 함수 타입으로 감싸집니다. 그런 다음 TypeScript는 구조적 제약을 만족하기 위해 모든 매개변수 타입의 교집합을 추론합니다.
type A = UnionToIntersection<{ a: 1 } | { b: 2 }>;
// { a: 1 } & { b: 2 }UnionToTuple: 어려운 문제
공용체를 튜플로 변환하는 것은 이론적으로 가능하지만 평가 순서에 의존합니다. TypeScript는 평가 순서를 보장하지 않으므로 프로덕션에서는 사용하지 마십시오.
// Not reliable — union member order is unspecified
// Use TupleToUnion (safe) not UnionToTuple (fragile)TupleToUnion의 실제 활용
문자열 리터럴 튜플에서 유효한 모든 키를 추출하여 검증용 공용체 타입을 만듭니다.
const ALLOWED_METHODS = ["GET", "POST", "PUT", "DELETE"] as const;
type HttpMethod = typeof ALLOWED_METHODS[number];
function request(method: HttpMethod) { /* ... */ }UnionToIntersection의 실제 활용
공용체에 포함된 여러 믹스인 인터페이스를 하나의 결합된 타입으로 병합합니다.
type Mixin1 = { log(): void };
type Mixin2 = { save(): Promise<void> };
type Combined = UnionToIntersection<Mixin1 | Mixin2>;
// { log(): void } & { save(): Promise<void> }원시 타입의 교집합
서로 관련 없는 원시 타입을 교집합으로 만들면 never가 됩니다. 어떤 값도 동시에 string과 number일 수 없기 때문입니다.
type X = UnionToIntersection<string | number>; // never제네릭 제약 조건에서 사용하기
제네릭 제약 조건 안에서 TupleToUnion과 UnionToIntersection을 결합하여 유연하고 타입 안전한 API를 만들 수 있습니다.
function merge<T extends object[]>(...args: T): UnionToIntersection<T[number]> {
return Object.assign({}, ...args) as any;
}요약: 튜플 ↔ 공용체 ↔ 교집합
TupleToUnion은 T[number] 인덱싱을 사용합니다. UnionToIntersection은 infer를 사용하는 분배 함수 기법을 사용합니다. 두 타입 모두 고급 타입 조작에 필수적인 도구입니다.
빠른 확인
TupleToUnion<[string, number]>은 무엇입니까?
학습 내용
TupleToUnion은 숫자 인덱싱을 사용하여 튜플에서 요소 공용체를 추출합니다. UnionToIntersection은 분배 함수 기법을 사용합니다. 이러한 기법은 고급 TypeScript 타입 조작을 위한 기본 패턴입니다.
자주 묻는 질문
“TupleToUnion 및 UnionToIntersection” 강의는 무료인가요?
네 — “TupleToUnion 및 UnionToIntersection” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“TupleToUnion 및 UnionToIntersection”에서 뭘 배우나요?
프로그램을 통해 튜플과 유니언 사이를 변환합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“TupleToUnion 및 UnionToIntersection” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- DeepPartial 및 DeepReadonly
- Flatten 및 UnwrapPromise 유틸리티
- TupleToUnion 및 UnionToIntersection
- 형식 유틸리티 라이브러리 배포하기