반응형
TypeScript는 기본 타입 지정뿐 아니라, 고급 타입을 통해 더욱 유연하고 강력한 코드를 작성할 수 있다.
1.교차 타입(Intersection Types)
교차타입은 여러 타입을 합쳐 하나의 타입으로 만드는 방법이다.
interface User {
name: string;
age: number;
}
interface Admin {
isAdmin: boolean;
}
type AdminUser = User & Admin;
const adminUser: AdminUser = { name: "Bob", age: 28, isAdmin: true };
2. 조건부 타입(Conditional Types)
조건부 타입은 T extends U ? X : Y 구문으로 타입을 유연하게 지정할 수있다.
type IsString<T> = T extends string ? "Yes" : "No";
type Test1 = IsString<string>; // "Yes"
type Test2 = IsString<number>; // "No"
3. 유틸리티 타입(Utility Types)
TypeScript에는 미리 정의된 유틸리티 타입들이 있어, 기존 타입을 변형한다.
Partial: 모든 속성을 선택적으로 만든다.
interface Todo {
title: string;
description: string;
}
const todo: Partial<Todo> = { title: "Buy groceries" };
Readonly: 속성을 수정할 수 없도록 만든다.
const todo: Readonly<Todo> = { title: "Read book", description: "Chapter 5" };
// todo.title = "Write"; // 오류 발생
4.매핑된 타입(Mapped Types)
매핑된 타입을 사용하면 객체의 각 속성 타입을 변형할 수 있다.
type Optional<T> = {
[P in keyof T]?: T[P];
};
type UserOptional = Optional<User>;
const user: UserOptional = { name: "Alice" };
5. 타입 추론과 keyof
TypeScript 는 keyof 와 같은 키워드를 사용해 객체의 키를 추론하고 사용할 수 있다.
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
const person = { name: "Charlie", age: 32 };
console.log(getProperty(person, "name")); // "Charlie"
이러한 TypeScript의 고급 타입들은 코드의 재사용성을 높이고, 안정성을 유지하면서도 더욱 강력한 타입구조를 구축할 수 있게 해준다.
728x90
반응형
LIST