타입과 인터페이스의 차이점 알기
둘의 차이점을 알기 전 비슷한 점에 대해서 알아보겠습니다. 타입은 인터페이스로 정의하든 타입으로 정의 하든 상태에는 차이가 없습니다.
인터페이스는 "타입"을 확장할 수 있으며, 타입은"인터페이스"를 확장할 수 있습니다.
IStateWithPop과 TStateWithPop은 둘 다 동일합니다. 여기서 한 가지 주의할 점이 있습니다.
인터페이스는 유니온 타입 같은 복잡한 타입을 확장하지 못합니다. 복잡한타입을 확장하고 싶다면 타입과 &을 사용해야 합니다.
이제부터는 타입과 인터페이스의 다른 점들을 살펴보겠습니다.
유니온 타입은 있지만 유니온 인터페이스는이라는 개념은 없습니다.
타입은 튜플을 사용할 수 있습니다
인터페이스도 튜플을 구현할 수 있습니다. 하지만 타입튜플에서 보이는 것과 같은 메서드들은 사용할 수 없습니다.
결론적으로 튜플을 사용하고 싶다면 타입을 이용하는 것이 더 나은 선택일 것입니다.
인터페이스에도 타입에 없는 몇 가지 기능이 있습니다 그중 하나는 보강(augment)입니다.
따로 extends 키워드를 쓴 것도 아니지만 두 번째 인터페이스에서 population 속성을 보강하여 오류가 나지 않는 것을 볼 수 있습니다.
이 예제처럼 속성을 보강(확장)하는 것을 '선언 병합(declaration merging)'이라고 합니다.
결론
1. 복잡한 타입은 타입 별칭(alias) 사용
2. 타입이든 인터페이스든 프로젝트 팀의 컨벤션에 맞추어 사용하면 된다.
3. 아직 스타일이 확립되지 않은 프로젝트라면 향후 보강 가능성을 고려해야 한다.
4. 어떠한 API에 대한 타입을 작성해야 한다면 인터페이스를 사용하는 것이 좋다. 왜냐하면 API가 변경될 때 사용자가 인터페이스를 통해
새로운 필드를 병합할 수 있기 때문이다.
'Typescript' 카테고리의 다른 글
Effective Typescript - 아이템15 (0) | 2023.04.11 |
---|---|
Effective Typescript - 타입 연산과 제네릭 사용으로 반복 줄이기 (0) | 2023.04.11 |
Effective Typescript - 함수 표현식에 타입 적용하기 (0) | 2023.04.09 |
Effective Typescript - 잉여 속성 체크의 한계 (0) | 2023.04.08 |
Effective Typescript - 타입 단언보다는 타입 선언을 사용하기 (0) | 2023.04.08 |