TypeScript 타입 시스템 해설: 구조적 타이핑과 유니온/인터섹션 타입, 객체 리터럴 검사
핵심 내용
구조적 타이핑, 유니온/인터섹션 타입, 템플릿 리터럴 타입 및 객체 리터럴의 엄격한 검사 규칙을 예제와 함께 정리했다.
자세히 보기
TypeScript는 Structural Type System을 채택하여 타입 비교 시 이름이 아닌 구조를 기준으로 할당 가능성을 판단한다. 예를 들어, User와 Admin 클래스가 동일한 메서드 구조를 가진다면 서로 할당할 수 있으며, 반환 타입이 number에서 boolean으로 바뀌는 등 구조가 불일치할 때만 에러가 발생한다.
타입 제한과 유닛 타입
타입은 할당 가능한 값의 집합으로 정의된다. type Role = string처럼 넓은 범위를 지정할 수 있으며, type AdminRole = "manager"처럼 하나의 원시값만 가지는 것을 유닛(Unit) 타입이라고 한다. let으로 선언된 변수는 넓은 타입(string)으로 추론되어 유닛 타입 파라미터에 할당 시 에러가 발생할 수 있으나, const로 선언하면 타입이 좁아져(narrowing) 할당이 가능하다.
유니온 및 인터섹션 타입
유니온 타입(|)은 합집합으로, 여러 타입 중 하나를 가질 수 있게 한다. 인터섹션 타입(&)은 교집합으로, 양쪽 타입 모두에 할당 가능한 값만 남긴다. 상위 타입과 하위 타입의 교집합은 하위 타입이 되며, 합집합은 상위 타입이 된다. any 타입과 다른 타입의 교집합은 never를 제외하고 모두 any가 된다.
템플릿 리터럴 타입
TypeScript 4.5 이상에서는 템플릿 리터럴 타입을 사용하여 문자열 조합을 동적으로 생성할 수 있다. Capitalize 유틸리티 타입과 결합하여 camelCase 형식의 타입을 쉽게 만들 수 있다.
객체 리터럴의 엄격한 검사
구조적 타이핑 원칙상, 추가 속성이 있는 객체도 대상 타입의 속성을 포함하면 할당이 가능하다. 그러나 객체 리터럴을 변수에 직접 할당할 때는 'Excess Property Check'가 적용되어 정의되지 않은 속성이 있으면 에러가 발생한다. 이는 변수를 통해 간접 할당할 때는 적용되지 않는다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.