interface
키워드를 사용해 값이 특정한 형태(shape)를 갖도록 제약할 수 있다. 인터페이스를 정의하는 기본적인 문법은 객체 타입의 그것과 유사하다.User
타입의 값 user
를 받아 이름을 반환하는 함수 인터페이스를 다음과 같이 적을 수 있다.user
가 아닌 u
로 바꾸어 써도 매개변수의 타입 순서만 맞는다면 에러는 발생하지 않는다.$
과 같이 호출 가능한(callable) 동시에 추가적으로 여러 속성을 갖는 객체가 존재할 수 있다. 이런 객체의 타입을 표현하기 위해서 호출 시그니쳐와 속성 타입 정의를 동시에 적을 수 있다. 타입스크립트 공식 문서의 Counter
예제를 살펴보자.Counter
타입의 값은 함수로서 호출 할 수 있고, 따라서 호출 시그니쳐를 갖는다. 한편, 이 인터페이스는 추가적으로 interval
과 reset
이라는 속성을 가진다. 따라서 인터페이스는 해당 속성의 타입 정보 또한 포함한다.Response
인터페이스를 아래와 같이 정의할 수 있다.type UUID = string
). 인터페이스로는 해당 타입을 표현하는 것이 불가능하다.type User = { name: string; }
타입과 관련된 타입 에러가 발생했을 시 에러 메시지는 User
대신 { name: string; }
를 보여준다. 한편 인터페이스는 실제로 새 타입을 생성하고, interface User { name: string; }
과 관련된 에러 메시지에는 User
가 등장한다.extends
키워드를 이용해 확장할 수 있는 반면, 타입 별칭의 경우는 그런 수단을 제공하지 않는다.