Typescript
Type vs Interface 어떤것을 써야할까?
심재철
2020. 4. 13. 16:48
interface 타입과 객체 자체에 대한 type 별칭은 많은 점이 비슷하지만,
type 별칭보다 더 많은 것을 할 수 있기에 interface를 사용하는 것을 일반적으로 권장합니다.
interface는 같은 이름으로 여러 번 선언을 해도 컴파일 시점에서 합쳐지기 때문에 확장성이 좋다. 따라서 일반적으로는 interface를 사용하고 union, tuple 등이 필요한 경우에만 type 별칭을 사용하라는 TypeScript Handbook의 내용은 현재에도 유효하다.
-> 예를들어,
A.tsx 파일에서
interface test {
str1: '1'
}
B.tsx 파일에서
interface test {
str2: '2'
}
똑같은 이름의 인터페이스를 중복으로 선언하면 프로젝트가 컴파일 될때 아래와 같이 변경된다는 말이다.
interface test {
str1: '1',
str2: '2'
}
이렇게 같은 이름의 인터페이스가 합쳐지는 현상을 declaration merging라고 한다. 보시다시피, type보다 interface가 좀 더 유연하다.
declaration merging 어떤 경우에 사용되는지?
가끔 타입스크립트로 작성된 라이브러리를 사용할때 타입이 너무 타이트하게 잡혀있어서 에러가 나는 경우가 있다. 이런 경우에 그 인터페이스를 declaration merging 하면 라이브러리 코드를 건드리지 않고 타입을 손쉽게 추가할 수 있다.
type 별칭으로 작성된 타입은 조금 더 제한적이기 때문에 private API같이 외부에 노출할 필요가 없는 경우에 사용하는 것이 좋다.
출처
https://joonsungum.github.io/post/2019-02-25-typescript-interface-and-type-alias/