🤞 내용 요약
keyof
: 객체의 모든 속성 이름을 문자열 유니온 타입으로 추출합니다.
Partial<T>
: 타입 T의 모든 속성을 선택적(optional)으로 만듭니다.
Required<T>
: 타입 T의 모든 속성을 필수적(required)으로 만듭니다.
Readonly<T>
: 타입 T의 모든 속성을 읽기 전용(readonly)으로 만듭니다.
Record<K, T>
: 속성 이름이 K이고 값 타입이 T인 객체 타입을 만듭니다.
Pick<T, K>
: 타입 T에서 속성 이름이 K인 부분집합 타입을 만듭니다.
Omit<T, K>
: 타입 T에서 속성 이름이 K인 부분집합을 제외한 타입을 만듭니다.
Exclude<T1, T2>
: 타입 T1에서 타입 T2에 할당 가능한 타입을 제외한 타입을 만듭니다.
NonNullable<Type>
: null 및 undefined를 제외한 타입을 만듭니다.
📌 코드 해석
⭐ keyof
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
type UserKey = keyof User;
const uk: UserKey = "age";
⭐ Partial<T>
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
let admin: Partial<User> = {
id: 1,
name: "Bob",
job: 'teacher'
};
⭐ Required<T>
interface User {
id: number;
name: string;
age?: number;
}
let admin2: Required<User> = {
id: 1,
name: "Bob",
age: 20
};
⭐ Readonly<T>
interface User {
id: number;
name: string;
age?: number;
}
let admin3: Readonly<User> = {
id: 1,
name: "Bob",
};
admin.id = 4;
⭐ Record<K, T>
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>
interface User {
id: number;
name: string;
age: number;
gender: "M" | "W";
}
const admin4: Pick<User, "id" | "name"> = {
id: 0,
name: "Bob",
};
⭐ Omit<T, K>
interface User {
id: number;
name: string;
age: number;
gender: "M" | "W";
}
const admin5: Omit<User, "age" | "gender"> = {
id: 0,
name: "Bob",
};
⭐ Exclude<T1, T2>
type T1 = string | number | boolean;
type T2 = Exclude<T1, number | string>;
⭐ NonNullable<Type>
type T1 = string | null | undefined | void;
type T2 = NonNullable<T1>;
type T3 = NonNullable<string[] | null | undefined>;