keyof
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
type UserKey = keyof User; // 'id' | 'name' | 'age' | 'gender'
const uk:UserKey= "name";
Partial<T>
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
// interface User {
// id?: number;
// name?: string;
// age?: number;
// gender?: "m" | "f";
// }
//partial을 아래와 같이 사용하면 위 주석의 코드를 사용한 것과 같다.
let admin :Partial<User> = {
id:1,
name: "Bob",
}
Required<T> -> 모든 property를 필수로 바꿔준다.
interface User {
id: number;
name: string;
age?: number;
}
let admin: User = { //Requiired<User> 형태로 넣으면 age가 없기 때문에 에러가 난다.
id: 1,
name: "Bob",
}
Readonly<T>
interface User {
id: number;
name: string;
age?: number;
}
let admin: Readonly<User> = { //이후 수정 불가.(읽기 전용)
id: 1,
name: "Bob",
}
admin.id = 4; // ->에러가 난다.
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:Score = {
// 1 : "A",
// 2 : "C",
// 3 : "B",
// 4 : "D",
// }
// 위 코드를 아래와 같이 사용할수 있음.
const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C" | "D"> = {
1 : "A",
2 : "C",
3 : "B",
4 : "D",
}
type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C" | "D";
const score2: Record<Grade, Score> = {
1 : "A",
2 : "C",
3 : "B",
4 : "D",
}
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>, Omit<T, K>, Exclude<T, T>, NonNullable<Type>
interface User {
id: number;
name: string;
age: number;
gender: "M" | "W";
}
const admin: Pick<User, "id" | "name"> = {
id:0,
name: "Bob",
}
const admin2: Omit<User, "age" | "gender"> = {
id:0,
name: "Bob",
}
type T1 = string | number | boolean
type T2 =Exclude<T1, number | string>; // -> boolean만 남게된다.
type T3 = string | null | undefined | void;
type T4 = NonNullable<T1>; // -> string과 void만 남게된다.
'TypeScript > TypeScript Basic' 카테고리의 다른 글
TypeScript를 사용하는 이유 (0) | 2024.03.18 |
---|---|
TypeScript 제네릭 (0) | 2024.03.13 |
TypeScript 추상 class (0) | 2024.03.13 |
TypeScript 리터럴, 유니온/교차 타입 (0) | 2024.03.12 |
TypeScript 함수 (0) | 2024.03.12 |