프론트엔드 개발 · 중급
공통된 속성을 가진 여러 인터페이스를 조합하여 판별된 유니언(Discriminated Unions)을 구성하는 방법과 이를 통해 얻을 수 있는 타입 안정성의 이점에 대해 설명해 주세요.
힌트 · 고유한 리터럴 타입 속성(discriminant)을 사용하여 유니언 멤버를 구분하고, `switch` 문 등으로 각 멤버의 타입을 안전하게 추론하는 방법을 설명합니다.
판별자타입 좁히기타입 가드타입 안정성합집합 타입
모범답안
네, 판별된 유니언은 타입스크립트에서 여러 인터페이스를 묶어 하나의 타입으로 표현하면서, 각 인터페이스를 구분할 수 있는 속성을 추가하여 타입 안정성을 높이는 방법입니다.
각 인터페이스에 공통된 속성, 예를 들어 type이라는 속성을 추가하고, 각 인터페이스마다 type 속성에 고유한 리터럴 타입을 할당합니다. 이렇게 하면 유니언 타입을 사용할 때 type 속성 값을 확인하여 어떤 인터페이스가 사용되었는지 알 수 있습니다.
interface Circle {
type: 'circle';
radius: number;
}
interface Square {
type: 'square';
sideLength: number;
}
type Shape = Circle | Square;
function getArea(shape: Shape) {
switch (shape.type) {
case 'circle':
return Math.PI * shape.radius * shape.radius;
case 'square':
return shape.sideLength * shape.sideLength;
}
}
switch 문이나 타입 가드를 사용하여 type 속성을 기반으로 타입을 좁히면, 타입스크립트 컴파일러는 각 분기에서 어떤 인터페이스가 사용되는지 정확하게 추론할 수 있습니다. 이를 통해 런타임 에러를 줄이고 코드의 안정성을 높일 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 TypeScript 면접 질문
- TypeScript에서 함수에 타입을 정의하는 방법은 무엇이며, 매개변수와 반환 값에 타입을 명시하는 이유를 설명해주세요.
- 'enum' 타입은 무엇이며, TypeScript에서 'enum'을 사용하는 주된 목적과 간단한 예시를 들어 설명해주세요.
- TypeScript에서 여러 타입 중 특정 타입의 값을 안전하게 처리하기 위해 사용하는 타입 가드(Type Guards)의 종류와 각각의 사용 사례를 설명해 주세요.
- TypeScript에서 제네릭(Generics)을 사용하는 주요 목적은 무엇이며, 제네릭 제약 조건(Generic Constraints)은 언제, 왜 필요한지 구체적인 코드 예시와 함께 설명해 주세요.
- TypeScript의 내장 유틸리티 타입 중 `Partial<T>`, `Pick<T, K>`, `Omit<T, K>` 각각의 역할과 실제 프로젝트에서 어떤 상황에 유용하게 활용될 수 있는지 설명해 주세요.
- JavaScript 라이브러리를 TypeScript 프로젝트에서 사용해야 할 때 `.d.ts` 선언 파일이 어떤 역할을 하는지 설명하고, 직접 선언 파일을 작성해야 하는 경우와 기존 선언 파일을 활용하는 방법을 비교하여 설명해 주세요.