inblog logo
|
Typescript Study

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

    Typescript
    Dragon C's avatar
    Dragon C
    Jan 03, 2024
    [Learning Typescript] Ch.7 인터페이스
    Contents
    7.1 타입 별칭 vs 인터페이스7.2 속성 타입선택적 속성, 읽기 전용 속성함수와 메서드호출 시그니처인덱스 시그니처7.3 인터페이스 확장7.4 인터페이스 병합

    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

    RSS·Powered by Inblog