Today I Learned_230418

2 분 소요

TypeScript

인프런 타입스크립트 강의 수강

  • Omit
    • 여러 속성 중 하나를 없애기
    • Partial보단 Pick, Omit 사용하자
    • Pick과 Exclude로 이루어짐
// K는 키값들만 와야 함
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

const newheejung2: Omit<Profile, 'married'> = {
    name: 'heejung',
    age: 29,
}

keyof any가 무슨 뜻일까? → 잘못된 타입을 넣어 보면 알 수 있다.

Omit의 두번째 인자에 키값이 아닌 값을 넣으면 에러가 난다.

  • Exclude
// T에서 U타입을 빼는 것
// T가 U의 부분집합이면 없애버리고, 아니면 T를 남긴다.
type Exclude<T, U> = T extends U ? never : T;

type Animal = 'Cat' | 'Dog' | 'bird';
type Mammal = Exclude<Animal, 'bird'> // 'Cat' extends 'bird'는 false이므로 남아있는다

여러 개를 돌면서(3개) 맞으면 다음껄로 넘어가고.. 이렇게 반복된다.

  • Extract
type Extract<T, U> = T extends U ? T : never;

Exclude와 Extract는 서로 반대가 된다.

삼항 연산자와 제네릭을 사용해서 타입을 만들 수 있다.

infer가 들어갈 때 부터 삼항 연산자 사용..

  • Required
    • 옵셔널한것을 필수로 바꾸는 것
interface Profile {
    name?: string,
    age?: number,
    married?: boolean,
}

//Profile을 전부 필수로 바꾸려면 Require<Profile>과 같이 사용
type Required<T> = {
    [P in keyof T]-?: T[P];
};
  • -는 modifier. optional을 전부 빼버리는 것
  • +?도 있지만 굳이 사용하진 않는다.
  • 남의 타입 가져올 때 ? 떼고 가져오고 싶으면 이거 사용하면 된다.

  • ReadOnly
    • 수정 못하게 막고싶을 때
type Readonly<T> = {
    readonly [P in keyof T]: T[P];
};
const heejung: Readonly<Profile> = {
    name: 'heejung',
    age: 29,
    married: true,
}
heejung.name = '12345'  //불가

readonly를 이렇게 붙일 수도 있음

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

// 이렇게 하면 readonly가 빠진다
type R<T> = {
    -readonly [Key in keyof T]-?: T[Key];
}

남의꺼 가져올 때 modifier를 통해서 떼버릴수가 있음

  • Record
    • 객체를 표현하는 방법
type Record<K extends keyof any, T> = {
    [P in K]: T;
};

인덱스드 시그니처를 이용하면 이렇게 표현할 수 있음

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

Record를 사용하면 더 간단하게 표현 가능

const b: Record<string, number> = {a: 3, b: 5, c: 7}

객체의 key는 string | number | symbol만 올 수 있음

이걸 가져오기 위해 extends keyof any 사용

  • NonNullable
    • null과 undefined를 뺀 타입을 가져오고 싶을 때 사용
type NonNullable<T> = T extends null | undefined ? never : T;
type A = string | null | undefined | boolean | number;
// A에서 null과 undefined를 뺀 타입을 가져오고 싶을 때
type B = NonNullable<A>;

타입들은 키에 적용되는 타입도 있고 인터페이스(객체)에 적용되는 타입도 있다.

Partial, Required, ReadOnly, Pick은 인터페이스에 적용

Exclude, Extract는 key들에 적용된다.

NonNullable은 key에 적용되는 것들

카테고리:

업데이트: