[TypeScript] Utility Types
유틸리티 타입
keyof
interface User {
id: number;
name: string;
}
type UserKey = keyof User; // = 'id' | 'name'
const uk: UserKey = "name";
Partial<T>
모든 프로퍼티를 옵션으로 바꾸어준다.
interface User {
id: number;
name: string;
age: number;
}
let admin: User = {
id: 1,
name: "Bob",
}; // err - age가 없다
let admin: Partial<User> = {
id: 1,
name: "Bob",
};
/*
interface User {
id?: number;
name?: string;
age?: number;
}
처럼 작용한다.*/
Required<T>
모든 프로퍼티를 필수로 바꾸어준다.
interface User {
id: number;
name: string;
age?: number;
}
let admin: Required<User> = {
id: 1,
name: "Bob",
}; // err - age를 넣어주어야함
Readonly<T>
읽기 전용으로 바꾸어준다.
interface User {
id: number;
name: string;
age?: number;
}
let admin: Readonly<User> = {
id: 1,
name: "Bob",
};
admin.id = 4; // err
Record<K, T>
K는 key, T는 type.
interface Score {
1: "A" | "B" | "C";
2: "A" | "B" | "C";
3: "A" | "B" | "C";
4: "A" | "B" | "C";
}
const score: Score = {
1: "A",
2: "C",
3: "B",
4: "B",
};
의 형태를 Record를 사용하면
const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C"> = {
1: "A",
2: "C",
3: "B",
4: "B",
};
이렇게 만들 수 있고
type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C";
const score: Record<Grade, Score> = {
1: "A",
2: "C",
3: "B",
4: "B",
};
처럼 만들 수 있다.
interface User {
id: number;
name: string;
age: number;
}
function isValid(user: User) {
const result: Record<keyof User, boolean> = {
is: user.id > 0,
name: user.name !== "",
age: user.age > 0,
};
return result;
}
Pick<T, K>
T 타입에서 K 프로퍼티만 골라서 사용.
interface User {
id: number;
name: string;
age: number;
gender: "M" | "W";
}
const admin: Pick<User, "id" | "name"> = {
id: 0,
name: "Bob",
};
Omit<T, K>
T 타입에서 K 프로퍼티만 빼고 사용.
interface User {
id: number;
name: string;
age: number;
gender: "M" | "W";
}
const admin: Omit<User, "age" | "gender"> = {
id: 0,
name: "Bob",
};
Exclude<T1, T2>
T1에서 T2와 겹치는 부분을 제외하고 사용.
type T1 = string | number | boolean;
type T2 = Exclude<T1, number | string>; // type T2 = boolean
NonNullable
null과 undefined를 제외한 타입을 생성한다.
type T1 = string | null | undefined | void;
type T2 = NonNullable<T1>; // type T2 = string | void
type Member = {
[key: string]: string;
};
let john: Member = { name: "kim" };
모든 object 속성에 대해 key값이 string으로 입력이된다면 value가 string으로 입력되어야한다.
댓글남기기