본문 바로가기
Programming/TypeScript

TypeScript 고급 타입과 유틸리티 타입

by d-e-v-j 2024. 11. 13.
반응형

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