소개
유틸리티 타입(Utility Types)은 개발자의 편의를 위해 타입스크립트가 제공하는 특수한 타입들이다. 기존의 타입을 조작한 여러가지 유용한 타입을 만들 수 있다.
상황
타입스크립트를 사용하면서 Interface로 타입을 정의하게 되는데, 어떤 변수를 정의할 때는 일부분의 필드만을 사용하고 싶다.
이런 상황이라면, 유틸리티 타입을 고려해볼 수 있다.
Documentation - Utility Types
Types which are globally included in TypeScript
www.typescriptlang.org
Partial<Type>, Required<Type>
interface User {
name: string;
age: number;
}
const user: Partial<User> = {
name: "doringri"
};
모든 프로퍼티의 타입을 Optional하게 바꾸는 유틸리티 타입이다.
interface User {
name?: string;
age?: number;
}
즉 Partial<User>는 위의 인터페이스를 새로 정의한 것과 같다.
반대로 Required<Type>은 모든 프로퍼티를 required로 바꾼다. Optional한 프로퍼티가 포함된 인터페이스에서 의미가 있다.
Record<Keys, Type>
const grade: Record<string, number> = {
math: 90,
korean: 100
};
객체 형태의 타입을 정의한다.
key와 value의 타입은 위에서 각각 string, number지만 union 타입도 가능하며, 리터럴 타입도 가능하다.
type Subject = "math" | "korean";
interface StatisticsInfo {
sum: number;
average: number;
}
const grade: Record<Subject, StatisticsInfo> = {
math: {sum: 200, average: 50},
korean: {sum: 280, average: 70}
};
즉 이런 것도 가능하다.
Pick<Type, Keys>, Omit<Type, Keys>
특정 프로퍼티를 이름으로 직접 골라서 새로운 타입을 만든다.
interface User {
name: string;
age: number;
hobby: string;
}
const user: Pick<User, "name" | "age"> = {
name: "doringri",
age: 10
};
반대로 Omit<Type, Keys>는 특정 프로퍼티를 제외한다. 사용법은 Pick과 같다.
Exclude<T, U>
type Todo = Exclude<"a" | "b" | "c", "b" | "c">;
특정 프로퍼티를 제외한다는 점에서 Omit과 비슷하지만, 사용법이 조금 다르다.
T에는 모든 타입의 목록을, U에는 제외할 타입의 목록을 넣으면 된다.
즉 위의 코드는 "a"라는 프로퍼티만 있는 객체를 정의한 것이다.
interface User {
name: string;
age: number;
hobby: string;
}
const user: Exclude<keyof User, "hobby"> = {
name: "doringri",
age: 10
};
keyof 연산자는 어떤 객체 타입에서 프로퍼티만을 추출하여 타입으로 만든 것이다.
즉 keyof User는 "name" | "age" | "hobby" 와 같다.
'IT > JavaScript & TypeScript' 카테고리의 다른 글
[JavaScript/알고리즘] BinaryGap (1) | 2025.01.03 |
---|---|
[JavaScript/알고리즘] K번째수 (feat. sort() 메소드) (0) | 2024.12.17 |
[TypeScript] 타입스크립트의 TS7053 오류와 타입 추론 (1) | 2024.11.30 |
[TypeScript] 타입스크립트의 Duck Typing과 Freshness (1) | 2024.11.29 |
[JavaScript/알고리즘] 의상 (0) | 2024.11.17 |