어떤 것을 어느 상황에?1) 개념적 측면2) 기술적 측면2-1) 인터페이스만 가능2-2) 타입만 가능결론 type or interface ?방법 1방법2 ( 이 방법이 권장되는 방식?? )
어떤 것을 어느 상황에?
- 인터페이스로 할 수 있는 것을 타입으로도 할 수 있고,
- 타입으로 할 수 있는 것을 인터페이스로도 할 수 있는 경우가 많다.
어떤 순간에 뭘 써야할까?
1) 개념적 측면
서로 비슷한 행위를 할 순 있지만, 코드만 딱 놓고 봤을 때 의미가 바로 와닿는게 중요하다고 생각함.
- 무언가 구현을 해서 써야하는 부분이 있다면 인터페이스
- 단순히 저장될 데이터 형식를 지정하는 용도라면 타입
2) 기술적 측면
2-1) 인터페이스만 가능
- 인터페이스 병합(merge)는 인터페이스만 가능. ( 타입은 중복에러 뜬다. )
즉, 어디에서나 동일한 이름으로 인터페이스를 선언하면 컴파일 시 합쳐져서 하나의 인터페이스가 된다.
interface Box { height: number; width: number; } interface Box { scale: number; } // height, width, scale 다 넣어야함. let box: Box = {height: 5, width: 6, scale: 10};
2-2) 타입만 가능
- 유니온 타입 (
type Direction = 'left' | 'right' | 'up' | 'down';
)
- computed property
type Person = { name: string, age: number } type Name = Person['name']; // Name : string type
결론 type or interface ?
정해진 건 없음. 다만 규칙을 정한 후에는 그대로 쭉 통일시키는 것이 좋음.
방법 1
- 구현이 필요한 부분은
interface
로 선언한다.
- 변화되지 않는 정적인 타입은
type
으로 선언한다.
방법2 ( 이 방법이 권장되는 방식?? )
- React TypeScript Cheatsheet : https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/basic_type_example/#types-or-interfaces
- Medium 글 발췌(2018년) : https://medium.com/@martin_hotell/interface-vs-type-alias-in-typescript-2-7-2a8f1777af4c
- 타입스크립트 공식 문서 ( 둘의 차이 비교 ) : https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#differences-between-type-aliases-and-interfaces
- 대부분의 상황에서는
interface
를 사용하여 타입을 정의한다.
union
등type
이 필수적인 상황에서만type
으로 선언한다.