TypeScript는 JavaScript에 정적 타입을 추가하여 코드의 안정성과 가독성을 높이는 언어입니다.
TypeScript에는 기본 타입 외에도 고급 타입이 존재하여 복잡한 타입 정의와 더 강력한 타입 체크를 가능하게 합니다.
오늘은
TypeScript의 고급 타입들을 정리한 자료입니다.
1. 유니온 타입 (Union Types)
여러 타입 중 하나를 가질 수 있는 변수를 정의할 때 사용합니다.
typescript
let value: string | number;
value = "Hello";
value = 123;
2. 인터섹션 타입 (Intersection Types)
여러 타입을 결합하여 하나의 타입으로 만들 때 사용합니다.
interface Person {
name: string;
}
interface Employee {
employeeId: number;
}
type EmployeePerson = Person & Employee;
const emp: EmployeePerson = {
name: "John",
employeeId: 1234
};
3. 제네릭 (Generics)
타입을 함수나 클래스의 매개변수로 사용할 때 사용합니다.
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("Hello");
4. 맵드 타입 (Mapped Types)
기존 타입을 변환하여 새로운 타입을 만들 때 사용합니다.
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = Readonly<Person>;
5. 조건부 타입 (Conditional Types)
타입에 조건을 걸어 다른 타입을 반환하게 합니다.
type IsString<T> = T extends string ? "string" : "not string";
type Test1 = IsString<string>; // "string"
type Test2 = IsString<number>; // "not string"
6. 인덱스 타입 (Index Types)
객체의 속성을 동적으로 접근할 때 사용합니다.
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const person = { name: "John", age: 30 };
const personName = getProperty(person, "name"); // John
7. 튜플 타입 (Tuple Types)
고정된 요소 수와 타입을 가지는 배열을 정의할 때 사용합니다.
let tuple: [string, number];
tuple = ["hello", 10];
8. 유틸리티 타입 (Utility Types)
- `Partial<T>`: T의 모든 속성을 선택적(optional)으로 만듭니다.
- `Required<T>`: T의 모든 속성을 필수(required)로 만듭니다.
- `Readonly<T>`: T의 모든 속성을 읽기 전용(readonly)으로 만듭니다.
- `Pick<T, K extends keyof T>`: T에서 특정 속성 K만 선택하여 새로운 타입을 만듭니다.
- `Omit<T, K extends keyof any>`: T에서 특정 속성 K를 제외한 타입을 만듭니다.
- `Record<K extends keyof any, T>`: K 타입의 키와 T 타입의 값을 가지는 객체 타입을 만듭니다.
interface Todo {
title: string;
description: string;
completed: boolean;
}
type PartialTodo = Partial<Todo>;
type ReadonlyTodo = Readonly<Todo>;
'Web' 카테고리의 다른 글
2024 Epson Innovation challenge 참여 후기 (0) | 2024.06.30 |
---|---|
공연 예매 프로젝트 - ERD, API 명세서 (0) | 2024.06.28 |
타입스크립트의 컴파일 (0) | 2024.06.27 |
동적 타입 언어와 정적 타입 언어 (0) | 2024.06.26 |
HTTP 메서드와 상태코드 (0) | 2024.06.24 |