<aside> 🔥 이번 시간에는 타입스크립트의 다양한 유틸리티 타입에 대해 알아보았다.
</aside>
keyof
interface의 키값만 가져올 수 있다.
// keyof
interface User {
id:number;
name:string;
age:number;
gender: "m" | "f"
}
type UserKey = keyof User; // id | name | age | gender
const uk:UserKey = "id"
Partial<T>
모든 프로퍼티를 optional로 바꿔준다.
// Partial<T>
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
let admin: Partial<User> = {
id: 1,
name: "chul",
};
required<T>
모든 프로퍼티를 필수로 바꿔준다.
// Required<T>
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
// 모든 프로퍼티가 필수이기 때문에 오류
let admin: Required<User> = {
id: 1,
name: "chul",
};
Readonly<T>
// Readonly<T>
interface User {
id: number;
name: string;
age?: number;
}
// 모든 프로퍼티가 필수이기 때문에 오류
let admin: Readonly<User> = {
id: 1,
name: "chul",
};
// 할당만 가능하고 이후 수정 불가.
admin.id = 4;
Record<K, T>
// Record<K,T>
K : Key
T : Type
// 이런식으로 작성하는 것을
interface Score {
"1": "A" | "B" | "C" | "D";
"2": "A" | "B" | "C" | "D";
"3": "A" | "B" | "C" | "D";
"4": "A" | "B" | "C" | "D";
}
const score = {
1: "A",
2: "B",
3: "C",
4: "D",
};
// 이런식으로
const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C" | "D"> = {
1: "A",
2: "B",
3: "C",
4: "D",
};
// 혹은 이런식으로
// Record<K,T>
type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C" | "D";
const score: Record<Grade, Score> = {
1: "A",
2: "B",
3: "C",
4: "D",
};
keyof 와 Record 활용
interface User {
id: number;
name: string;
age: number;
}
function isValid(user: User) {
const result: Record<keyof User, boolean> = {
id: user.id > 0,
name: user.name !== "",
age: user.age > 0,
};
return result;
}
Pick<T, K>
아래와같이 특정 키만 가져와서 사용 가능.
// Pick<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>
특정 프로퍼티를 생략하고 사용 가능
// Omit<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>
// Exclude <T1, T2>
// 타입1에서 타입2를 제외하고 사용
// Omit은 property를 제거
// Exclude는 type을 제거
type T1 = string | number;
type T2 = Exclude<T1, number>; // T1 에서 number 제거
NonNullable<Type>
// NonNullabe<Type>
type T1 = string | null | undefined | void;
type T2 = NonNullable<T1>
// T1에서 null만 뺀 타입