타입은 집합이다

김석규·2023년 2월 14일
0

타입스크립트

목록 보기
4/4

개요

이펙티브 타입스크립트 읽다가 타입 시스템에 대한 이해를 도와줄 설명을 찾았기에 공유하려 한다. 바로 타입은 값들의 집합이라는 점이다.

타입은 할당 가능한 값들의 집합

타입스크립트의 타입은 할당 가능한 값들의 집합이다. 이 집합은 타입의 범위인데, 가령 모든 숫자값의 집합은 number 타입이다. number이든 int이든 float이든 숫자를 나타내는 자바스크립트의 자료형은 결국 number 밖에 없다.

12와 1.2 전부 number타입 범위에 속해있기 때문에 똑같이 number 타입에 할당 할 수 있다. 그러나 문자열인 '12'는 string 범위에 속해있기 때문에 number 타입에 할당 할 수 없다.

타입과 집합

타입과 집합을 대응 시켜보면 어떻게 될까?

타입집합
never공집합
literal원소 1개인 집합
값이 T에 할당 가능값이 T의 원소
T1이 T2에 할당 가능T1이 T2의 부분 집합
T1이 T2를 상속T1이 T2의 부분 집합
T1 | T2T1과 T2의 합집합
T1 & T2T1과 T2의 교집합
unknown전체 집합
  • 가장 작은 집합은 아무것도 포함하지 않는 공집합이다. 타입으로는 never 타입이며, never 타입으로 선언된 변수는 공집합이기 때문에 아무런 값도 할당 할 수 없다.

  • 한가지 값만 포함하다면 이는 유닛(unit) 타입인 리터럴(literal) 타입이다.

    • 두세개를 묶으려면 유니온(union) 타입을 이용한다. 유니온 타입은 각 타입의 합집합이다.
  • 교집합에 해당하는 타입은 &연산자를 이용한 인터섹션(intersection) 타입이다. 타입 연산자는 인터페이스의 속성이 아니라 값의 집합에 적용되므로 공통으로 가지는 속성이 없더라도, 추가적인 속성을 가지는 값이라도 여전히 그 타입에 속한다.

  • unknown 타입은 전체 집합이다.

  • 집합의 관점에서 타입체커의 중요한 일은 하나의 집합이 다른 집합의 부분 집합인지 검사하는 것이다.

  • extends 키워드는 타입의 상속을 나타내기도 하고 제네릭 타입에서 한정자로도 쓰인다.

    • 타입의 상속은 객체의 상속처럼 이해하는 것이 아니라, 어떤 타입의 부분집합의 범위를 가지는 것으로 이해하는 편이 바람직하다.

    • 한정자로서의 역할 또한 어떤 타입의 부분 집합의 의미로 사용된다.

profile
백엔드 개발자 지망생

0개의 댓글