깜놀하는 해므찌로

typescript Utility 유틸리티 활용 예시 / keyof, partial, required, readonly, record, pick, omit, exclude, nonNullAble 본문

IT

typescript Utility 유틸리티 활용 예시 / keyof, partial, required, readonly, record, pick, omit, exclude, nonNullAble

agnusdei1207 2023. 5. 28. 14:10
반응형
SMALL
/** 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> : 프로퍼티를 모두 옵션으로 바꿈 */
let admin:Partial<User> = {
    id : 1,
    name : "이름"
}

/* partial 효과 ? 처리
    interface User{
        id?:number;
        name?:string;
        age?:number;
        gender?:"m" | "f";
    }
*/

/** required 모두 필수 프로퍼티로 바꿈 */
let req:Required<User> = {
    id : 2,
    name : "이름",
    age : 30,
    gender : "m"
}


/** readonly 모든 프로퍼티를 읽기 전용으로 바꿈 */
let rea:Readonly<User> = {
    id : 1,
    name : "이름",
    age : 10,
    gender : "m"
}

/** Record<K, T> */
interface Score{ // key, type
    "1" : "A" | "B" | "C";
    "2" : "A" | "B" | "C";
    "3" : "A" | "B" | "C";
}

let score = {
    1 : "A",
    2 : "B",
    3 : "C"
} 
// 레코드 활용 예시
let score2:Record<"1" | "2" | "3", "A" | "B" | "C"> = {
    1 : "A",
    2 : "B",
    3 : "C"
} 

// type + record 활용 예시
type Grade = "1" | "2" | "3";
type Scor = "A" | "B" | "C"; 

let score3:Record<Grade, Scor> = { // 키, 타입
    1 : "A",
    2 : "B",
    3 : "C"
} 

interface User2{
    id:number;
    name:string;
    age:number;
}

// 유효성 검사 함수
function isValid(user:User2){
    let result:Record<keyof User2, boolean> = { // keyof 활용
        id : user.id > 0,
        name : user.name !== "",
        age : user.age > 0
    }
    return result;
}

/** Pick<T, K> */ 
const admin2: Pick<User, "id" | "name"> = { // 해당 요소만 선택하여 사용
    id : 0,
    name : "이름"
}

/** Omit<T, K> */ 
const admin3: Omit<User, "id" | "name"> = { // 해당 요소만 제외하고 사용
    age:30,
    gender: "m"
}

/** Exclude<T1, T2> */
type T1 = string | number | boolean;
type T2 = Exclude<T1, string | number>; // T1 에서 string 타입만 제외

/** NonNullable : null 과 undefined 를 제외 */
type T3 = string | void | null | undefined;
type T4 = NonNullable<T3>; // string, void 만 남음

 

반응형
LIST