타입 스크립트 - 인터페이스

김영준·2023년 7월 29일
0

TIL

목록 보기
35/91
post-thumbnail

interface

type 뿐만 아니라 interface를 통해 타입을 선언할 수 있다.

type과의 차이점

  • 인터페이스는 할당 연산자가 없다.
  • 중괄호를 통해 생성해야 한다.

현재 아래를 보면 interface로 UserI 타입을 선언했다. 하지만 UserI 타입인 user2에 isValid가 없어서 에러가 발생한다.


key 뒤에 ?를 붙이면 필수 속성이 아니라는 것을 나타낸다.
따라서 isValid가 없어도 에러가 발생하지 않는다.
interface뿐만 아니라 type에서도 사용 가능하다.


key 앞에 readonly를 작성하면 해당 key는 읽기 전용이 된다.


타입을 선언할 때는 쉼표, 세미콜론을 통해 구분하고 생략도 가능하다.

type과 interface의 차이점은 거의 없지만 개체 타입을 정의할 때는 interface를 사용하는 것을 추천한다.


함수의 타입 선언

호출 시그니처(Call signature)를 통해 interface로 함수 타입을 정의할 수 있다.


클래스의 타입 선언

클래스 자체를 데이터처럼 인수로 사용해서 매개변수로 받아서 생성자 함수를 호출할 때 해당하는 매개변수에는 생성자 시그니처가 있는 타입이 적용되어야 한다.

생성 시그니처(Construct signature)를 통해 생성자 타입을 정의할 수 있다.


인덱싱 가능 타입 선언

인덱스 시그니처(Index signature)를 통해 인덱싱 가능한 타입을 선언할 수 있다.


인덱스 시그니처를 사용하여 다른 속성들을 추가하는 것을 가능하게 할 수 있다.


interface에 명확하게 정의되어 있는 속성을 조회할 때는 인덱스 시그니처가 필요없다.


아래 예제는 payload의 타입에 인덱스 시그니처가 없어서 오류가 발생하고 있다.


이 때 매개변수로 전달하는 user와 매개변수로 받는 payload의 타입에 모두 인덱스 시그니처를 작성해줘야 한다.


타입 인덱싱

interface 내부에 정의되어있는 타입도 인덱싱 할 수 있다.


인터페이스 확장

extends 키워드를 통해서 타입을 확장해서 선언할 수 있다.


또한 extends 키워드를 사용하지 않고 타입을 중복 선언 해도 덮어쓰지 않고 병합된다.


단 인터페이스를 중복 선언 할때는 기존의 존재하는 속성을 중복해서 사용할 때 타입이 일치해야 한다.

profile
꾸준히 성장하는 개발자 블로그

0개의 댓글