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

+ Recent posts