7.1 타입 별칭 vs 인터페이스
할당 가능성 오류는 동일
차이점
인터페이스는 병합 기능이 있다.
인터페이스는 클래스가 선언된 구조의 타입을 확인하는데 사용할 수 있다.
인터페이스에서 타입스크립트 타입 검사기가 더 빨리 작동한다.
• 인터페이스 = 이름 있는 객체로 간주함 (캐싱함)
• 타입 별칭 = 이름 없는 객체 리터럴의 별칭으로 간주함유니언 타입 지정과 같은 경우를 제외하고는 인터페이스 사용을 추천
인터페이스는 클래스가 선언된 구조의 타입을 확인하는데 사용할 수 있다.
7.2 속성 타입
선택적 속성, 읽기 전용 속성
읽기 전용 속성
readonly 속성은 인터페이스에서만 사용
명시적 타입으로 선언했을 경우 변수에 대해서는 readonly 속성이 적용됨
유추된 타입에 대해서는 readonly 속성에 적용되지 않음
함수와 메서드
속성 구문 vs 메서드 구문 차이점
메서드는 readonly 불가능, 속성은 가능
인터페이스 병합을 다르게 처리
타입에서 수행되는 일부 작업이 다르게 처리됨 (15장 ‘타입 운영’)
기본 함수가 this를 참조한다면 ( = 클래스의 인스턴스로서 사용되는 경우) 메서드 사용 추천
호출 시그니처
호출 시그니처 구문 = 함수의 타입을 별도로 정의하는 방식
타입 별칭으로 정의하는 경우는 ‘함수 타입 표현식’이라고 부른다.
인덱스 시그니처
인덱스 시그니처 구문 = 인터페이스의 객체가 임의의 키를 받을 수 있고, 선언된 특정 타입을 반환할 수 있음
객체의 어떤 이름의 속성이든 접근할 수 있고, 할당할 수 있음
= 있지도 않은 속성에 접근해도 타입 시스템은 통과시킴 (런타임에서는 에러)
Map이나 Set같은 제네릭 컨테이너 클래스로 작업하는 것을 더 추천
인덱스 시그니처 구문 = 인터페이스의 객체가 임의의 키를 받을 수 있고, 선언된 특정 타입을 반환할 수 있음
일반 속성과 혼합해서 사용
숫자 인덱스 시그니처
인덱스 시그니처 구문 = 인터페이스의 객체가 임의의 키를 받을 수 있고, 선언된 특정 타입을 반환할 수 있음
객체의 키가 숫자가 되어야 하는 경우, 숫자 인덱스 시그니처를 사용할 수 있음
(주의) 숫자 인덱스 시그니처는 string 인덱스 시그니처 타입으로 할당할 수 있어야 한다
String 인덱스 시그니처 타입이 숫자 인덱스 시그니처 타입을 포괄하는 용도로 사용될 수 있기 때문
중첩 인터페이스 = 인터페이스가 인터페이스 타입 혹은 객체 타입을 속성으로 가질 수 있음
7.3 인터페이스 확장
Extends
재정의된 속성
속성은 재정의할 수 있음
파생 인터페이스는 기본 인터페이스의 속성의 하위 집합이어야 한다.
7.4 인터페이스 병합
인터페이스는 동일한 이름으로 동일한 스코프에 선언된 경우 자동 병합된다.
인터페이스 병합은 외부 패키니나 Window 같은 내장 전역 인터페이스를 보강할 때 유용함
Interface Window { myEnv: string; }
위와 같이 선언하면 window 객체에 커스텀 속성을 더해 사용할 수 있음
인터페이스 병합 시에는 동일한 속성의 이름은 선언할 수 없음