티스토리 뷰
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/
'Typescript' 카테고리의 다른 글
typescript의 unknown과 never 타입 (1) | 2020.07.16 |
---|---|
typescript의 never타입 (0) | 2020.07.16 |
스토리북 typescript bug, import된 타입을 불러오지 못하는 현상 (0) | 2020.05.29 |
fork-ts-checker-webpack-plugin 란 (0) | 2020.05.29 |
typescript + react eslint룰 설정 (0) | 2020.05.29 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- useEffect
- Next.js
- Action
- Babel
- react hooks
- es6
- Polyfill
- storybook
- reactdom
- promise
- async
- type alias
- design system
- await
- computed
- reflow
- mobx
- reducer
- state
- server side rendering
- hydrate
- rendering scope
- atomic design
- javascript
- return type
- webpack
- useRef
- props
- typescript
- react
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함