[Effective TypeScript] 2장 6-7 타입 스크립트의 타입시스템

채동기·2023년 2월 14일
0

TypeScript

목록 보기
2/21

아이템6) 편집기를 사용하여 타입시스템 탐색하기

  • 편집기에서 타입스크립트 언어 서비스를 적극 활용해야 합니다.
  • 편집기를 사용하면 어떻게 타입시스템이 동작하는지, 그리고 타입스크립트가 어떻게 타입을 추론하는지 개념을 잡을 수 있습니다.

    편집기를 통해 어떤 타입을 추론하고 있고, 왜 오류가 나는지 확인할 수 있습니다.
  • 타입스크립트가 동작을 어떻게 모델링하는지 알기 위해 타입 선언 파일을 찾아보는 방법을 터득해야 합니다.

    위의 옵션을 선택하면 타입이 선언되어 있는 파일로 갈 수 있습니다.
    더 많은 타입을 탐색하다 보면 타입스크립트에 대해 이해할 수 있습니다.

아이템7) 타입이 값들의 집합이라고 생각하기

  • 타입을 값의 집합이라고 생각하면 이해하기 편합니다.
interface Vector1D { x: number; }
interface Vector2D extends Vector1D { y: number; }
interface Vector3D extends Vector2D { z: number; }

  • 타입스크립트의 타입은 엄격한 상속 관계가 아니라 겹쳐지는 집합(벤 다이어그램)으로 표현됩니다. 두 타입은 서브 타입이 아니면서도 겹쳐질 수 있습니다.
  • 타입 연산은 집합의 범위에 적용됩니다. A와 B의 인터섹션은 A의 범위와 B의 범위의 인터섹션입니다. 객체타입에서는 A & B인 값이 A와 B의 속성을 모두 가짐을 의미합니다.
interface Person {
  name: string;
}

interface Lifespan {
  birth: Date;
  death?: Date;
}

// type PersonSpan = Person & Lifespan;

const ps: PersonSpan = {
  name: "동글",
  birth: new Date("1995/01/01"),
  death: new Date("2150/12/31"),
}; // 정상


type K = keyof (Person | Lifespan); //타입 never

// 유니온에 대한 keyof 공집합이어야만합니다.
// 명확히 표현하면 아래와 같이 표현할 수 있습니다. 
keyof (A&B) = (keyof A) | (keyof B);
keyof (A|B) = (keyof A) & (keyof B);
  • 'A는 B를 상속','A는 B에 할당 가능','A는 B의 서브타입'은 'A는 B의 부분 집합'과 같은 의미입니다.

ExClude

  type T = Exclude<string|Date, string|number>;  
  type NonZeroNums = Exclude<number, 0>;  

  //type Exclude<T, U> = T extends U ? never : T;
  //T에 오는 타입들 중 U에 오는 것들은 제외하겠다는 의미입니다.

출처

<이펙티브 타입스크립트> (댄 밴더캅 지음, 장원호 옮김, 인사이트, 2021)

profile
what doesn't kill you makes you stronger

0개의 댓글