WIL : 23.05.21(2)

jin·2023년 5월 21일
0

WIL

목록 보기
14/24
post-thumbnail

23.05.04~ / TypeScript Study_Utility Type

Utility Type

keyof

interface User {
    id : number;
    name : string;
    age: number;
    gender : "m" | "f";
}
type Userkey = keyof User; // id, name, age, gender 중에서 명시하겠다는 의미
const userkey : Userkey = "name"; // 다른걸 입력할 경우 에러

Partial<T>

property를 모두 옵션으로 변경해주므로 일부만 사용이 가능하게 된다.

interface User {
    id :  number;
    name : string;
    age : number;
    gender : "m" | "f";
}

let admin : Partial<User> = {
    id : 1,
    name : "Kim",
}

// 위의 admin은 다음 interface를 참조한 것이나 마찬가지이다.
// interface User {
//     id? :  number;
//     name? : string;
//     age? : number;
//     gender? : "m" | "f";
// }

단, 없는 프로퍼티를 입력할 경우 에러

Required<T>

Partial과 반대로 모든 프로퍼티를 필수로 설정해준다.
다음과 같이 프로퍼티에 옵셔널이 걸려있어도 Required를 걸게 되면 필수항목이 되는 것이다.

interface User {
    id? :  number;
    name? : string;
    age? : number;
    gender? : "m" | "f";
}

let admin : Required<User> = {
    id : 1,
    name : "Kim",
    age : 20,
    gender : "m"
}

Readonly<T>

readonly와 동일한 역할로 할당만 가능하고 수정이 불가능하다.

Record<K, T>

<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 winter_score : Score ={
    1 : "A",
    2 : "B",
    3 : "D",
    4 : "A"
}

이때 Record를 이용한다면 interface 부분을 지우고 다음과 같이 작성가능하다.

const winter_score : Record<"1"|"2"|"3"|"4","A"|"B"|"C"|"D"> ={
    1 : "A",
    2 : "B",
    3 : "D",
    4 : "A"
}

하지만 해당하는 키, 타입 값이 늘어날수록 가독성이 떨어진다. 따라서 다음과 같이 값을 type으로 따로 선언하여 정리할 수 있다.

type Grade = "1"|"2"|"3"|"4";
type Score = "A"|"B"|"C"|"D";
const winter_score : Record< Grade, Score > = {
    1 : "A",
    2 : "B",
    3 : "D",
    4 : "A"
}

기타

Pick<T, K> : 특정 프로퍼티만 사용하겠다.
const admin : Pick<User, "id" | "name" > 일 경우 ,User interface에서 id 와 name만 쓰겠다는 의미이다.

Omit<T, K> : 특정 프로퍼티를 제외하고 쓰겠다.
const admin : Omit<User, "id" | "name" > 일 경우 ,User interface에서 id 와 name는 제외하고 쓰겠다는 의미이다.

Exclude<T1, T2> : T1에서 T2를 제외하겠다.

NonNullable< T1 > : T1에서 null, undefined를 제외한다.

profile
。˚⋆。˚ ☁︎˚。⋆。˚☽˚。⋆˚ ☁︎˚

0개의 댓글