관리 메뉴

Jerry

[TIL] [타임어택9기][리뉴얼] 타입스크립트 올인원 : Part3. Utility Types- (21) : Required, Record, NonNullable 타입 분석 본문

Front/Typescript

[TIL] [타임어택9기][리뉴얼] 타입스크립트 올인원 : Part3. Utility Types- (21) : Required, Record, NonNullable 타입 분석

juicyjerry 2024. 3. 4. 22:28
반응형
Required, Record, NonNullable 타입 분석

 

 

 

 

 

 

interface Profile {
    readonly name?: string,
    readonly age?: number,
    readonly married?: false,
}

type R<T> = {
    [key in keyof  T]-?: T[key] // -는 옵셔널 빼기
    -readonly[key in keyof  T]-?: T[key] // readonly와 옵셔널을 빼고 가져와라
}

const zerocho: R<Profile> = {
    name: 'zerocho',
    age: 29,
    married: false,

 

 

 

 

 

 

zerocho.name = 'nero'; // 만약 수정 못 하게 하려면 Readonly

const zerocho: Readonly<Profile> = {
    name: 'zerocho',
    age: 29,
    married: false,
}

 

 

 

 

 

Record

interface Obj {
    [key: string]: number;
}
const a: Record<string, number> = { a: 3, b: 5, c: 7};

 

 

 

 

직접 record 만들기

type R<T extends keyof any, S> = { // 객체의 키에는 string, number, symbol만 올 수 있기 때문에 제한 조건 추가
    [key in T]: S;
}
const b: R<string, number> = { a: 3, b: 5, c: 7};

 

 

 

 

 

 

NonNullable

type A = String | number | null | boolean | undefined;
type B = NonNullable<A>;

 

 

 

 

 

직접 NonNullable 만들기

type C = N<A>;
type N<T> = T extends null | undefined ? never : T;
반응형