lil.dev
Published on

✨ 한 눈에 보는 타입스크립트 #5,6 인터페이스/타입 별칭

글쓴이

    📌 목차

    Welcome

    한 눈에 보는 타입스크립트

    💁🏻

    1. Intro
    2. 타입스크립트 개요
    3. 개발환경
    4. 타입 기본(Types)
    5. 인터페이스 (Interface)
    6. 타입 별칭 (Type Aliases)
    7. 제네릭 (Generic)
    8. 함수
    9. 클래스
    10. Optional
    11. 모듈
    12. TS 유틸리티 타입
    13. 참고 자료 (References)

    인터페이스 (Interface)

    인터페이스란?

    인터페이스는 타입스크립트 여러 객체를 정의하는 일종의 규칙이며 구조다.
    다음과 같이 interface 키워드와 함께 사용한다.

    interface IUser {
      name: string,
      age: number,
      isAdult: boolean
    }
    
    let user1: IUser = {
      name: 'Neo',
      age: 123,
      isAdult: true
    };
    
    // Error - TS2741: Property 'isAdult' is missing in type '{ name: string; age: number; }' but required in type 'IUser'.
    let user2: IUser = {
      name: 'Evan',
      age: 456
    };
    

    다음과 같이 속성에 ?를 사용하면 선택적 속성으로 정의할 수 있다.
    선택적 속성이란 '필수가 아닌 속성으로 정의'하는 방법이다.

    interface IUser {
      name: string,
      age: number,
      isAdult?: boolean // Optional property
    }
    
    // `isAdult`를 초기화하지 않아도 에러가 발생하지 않습니다.
    let user: IUser = {
      name: 'Neo',
      age: 123
    };
    

    함수 타입

    함수 타입을 인터페이스로 정의하는 경우, 호출 시그니처라는 것을 사용한다.
    호출 시그니처는 함수의 매개 변수(parameter)와 반환 타입을 지정한다.

    interface IName {
      (PARAMETER: PARAM_TYPE): RETURN_TYPE // Call signature
    }
    

    클래스 타입

    인터페이스로 클래스를 정의하는 경우, implements키워드를 사용한다.

    만약 정의한 클래스로 인수를 사용하는 경우
    구성 시그니처(Construct signature)을 사용할 수 있다.
    구성 시그니처는 호출 시그니처와 비슷하지만 new키워드를 사용한다.

    인덱싱 가능 타입 (Indexable types)

    우리는 인터페이스르 통해 특정 속성(메소드 등)의 타입을 정의할 수는 있지만,
    수많은 속성을 가지거나 단언할 수 없는 임의의 속성이 포함되는 구조에서는 기존 방식에 한계가 있다.
    이런 상황에서는 인덱스 시그니처(Index signature)를 사용한다.

    인덱서의 타입은 stringnumber만 지정할 수 있다.

    keyof 인덱싱 가능 타입에서 keyof를 사용하면 속성 이름을 타입으로 사용할 수 있다.
    인덱싱 가능 타입의 속성 이름들이 유니온 타입으로 적용된다.

    타입 별칭

    타입 별칭이란?

    type키워드를 사용해 새로운 타입 조합을 만들 수 있다.
    하나 이상의 타입을 조합해 별칭(이름)을 부여하며,
    정확히는 조합한 각 타입들을 참조하는 별칭을 만드는 것이다.
    일반적인 경우 둘 이상의 조합으로 구성하기 위해 유니온을 많이 사용한다.