[Learning Typescript] Ch.7 인터페이스

Typescript
Dragon C's avatar
Jan 03, 2024
[Learning Typescript] Ch.7 인터페이스

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 객체에 커스텀 속성을 더해 사용할 수 있음

  • 인터페이스 병합 시에는 동일한 속성의 이름은 선언할 수 없음

Share article

Typescript Study