Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 동적계획법
- Supabase
- 리액트 패턴
- 리액트 라우터 돔
- react router dom
- React
- 코어자바스크립트
- 프론트엔드
- tailwind
- styled component
- 코테
- 그리디
- 토이 프로젝트
- reduxtoolkit
- react pattern
- tanstack query
- 리액트
- TypeScript
- Next.js
- JavaScript
- 자바스크립트
- 타입스크립트
- 토이프로젝트
- 프로그래머스
- 코딩테스트
- Form
- 리덕스
- 스택
- React Query
- revalidatepath
Archives
- Today
- Total
느려도 한걸음씩
📘 TypeScript - 리터럴, 유니온/교차 타입 본문
타입스크립트를 사용할 때 자주 등장하는 개념 중 하나가 바로 리터럴 타입, 유니온 타입, 그리고 교차 타입입니다. 각각의 타입은 언제, 어떻게 사용해야 하는지 명확히 알고 있으면 코드의 안정성과 가독성을 크게 높일 수 있습니다. 이번 글에서는 이 세 가지 타입을 예제를 통해 쉽게 이해해 보겠습니다.
🔹 리터럴 타입 (Literal Type)
리터럴 타입은 특정한 값만 허용하는 타입입니다. 변수 선언 시 const를 쓰면 해당 값 자체가 타입으로 추론되기도 합니다.
const userName1 = 'Bob'; // 타입: 'Bob'
let userName2 = 'Tom'; // 타입: string (let은 재할당 가능하므로)
userName2 = 'John'; // ✅ 가능
// userName2 = 3; // ❌ 에러: string 타입에 숫자는 할당 불가
🔸 실전 예제: 직업 타입 제한하기
type Job = 'police' | 'developer' | 'teacher';
interface User {
name: string;
job: Job;
}
const user: User = {
name: 'Bob',
job: 'police', // ✅ 허용된 값
// job: 'student' // ❌ 에러: Job 타입에 없는 값
};
🔹 유니온 타입 (Union Type)
유니온 타입은 여러 타입 중 하나를 사용할 수 있음을 나타냅니다. | 기호를 사용합니다.
🔸 실전 예제: 서로 다른 타입의 객체 처리하기
interface Car {
name: 'car';
color: string;
start(): void;
}
interface Mobile {
name: 'mobile';
color: string;
call(): void;
}
function getGift(gift: Car | Mobile) {
console.log(gift.color); // ✅ 공통 속성은 안전하게 접근 가능
// gift.start(); // ❌ 에러: 공통 속성이 아님
// 타입 좁히기 (Discriminated Union)
if (gift.name === 'car') {
gift.start(); // ✅ Car로 좁혀짐
} else {
gift.call(); // ✅ Mobile로 좁혀짐
}
}
이렇게 name처럼 값으로 구분 가능한 고유 속성을 두면, 타입을 안전하게 구분할 수 있습니다. 이를 식별 가능한 유니온 타입이라고 합니다.
🔹 교차 타입 (Intersection Type)
교차 타입은 여러 타입을 모두 만족해야 하는 타입입니다. & 기호를 사용합니다.
🔸 실전 예제: 장난감 자동차
interface Car {
name: string;
start(): void;
}
interface Toy {
name: string;
color: string;
price: number;
}
const toyCar: Toy & Car = {
name: '타요',
color: 'blue',
price: 1000,
start() {
console.log("go...");
}
};
Toy & Car는 Toy와 Car의 모든 속성을 포함한 객체여야 하며, 위 예제처럼 모든 속성을 구현해야 타입이 일치합니다.
'FE develop > Typescript' 카테고리의 다른 글
📘 TypeScript - 제네릭 (0) | 2025.05.26 |
---|---|
📘 TypeScript - 클래스 (0) | 2025.05.23 |
📘 TypeScript - 함수 (1) | 2025.05.23 |
📘 TypeScript - 인터페이스 (0) | 2025.05.23 |
📘 TypeScript - 기본 타입 (0) | 2025.05.23 |