type alias vs interface
type alias는 모든 타입에 이름을 달아줄 수 있음.
interface는 객체 타입에만 가능.
그럼 객체 타입도 그냥 type alias로 이름 달아주면 되는 거 아닙니까?
하지만 type alias는 새로운 프로퍼티 정의가 불가능하고,
interface는 가능하다. (같은 이름의 인터페이스에 새로운 타입을 선언할 수 있음)
그럼 왜 굳이 이렇게 확장 가능한 방법과 확장 불가능한 방법으로 나눠 놨습니까?
type alias를 쓰는 게 좀 더 명확하긴 하다. 확장될 일이 없기 때문에.
하지만 interface를 활용해서 선언 병합을 하는 경우가 필요할 때도 있다.
// @emotion/react/types
export interface Theme {}
// emotion.d.ts
import '@emotion/react';
declare module '@emotion/react' {
export interface Theme {
colors: typeof Colors;
}
}
emotion 라이브러리의 types를 보면
interface 키워드를 통해 Theme이라는 타입을 제공한다.
이 라이브러리를 사용할 때, 해당 타입에다가 선언 병합으로 원하는 속성들을 추가해서 쓸 수 있다.
결론
(명확하게 코드를 짜기 위해) 확장 불가능한 타입을 선언하려면 type alias.
추후에 확장 가능한 타입을 선언하려면 interface.
참고 자료
https://tecoble.techcourse.co.kr/post/2022-11-07-typeAlias-interface/
interface vs type alias
what is the difference between interface and type alias? typescript…
tecoble.techcourse.co.kr
'프론트엔드 개발 > Typescript' 카테고리의 다른 글
객체 지향 프로그래밍 - Drag & Drop 프로젝트 01. (0) | 2023.03.21 |
---|---|
[타입스크립트] 제네릭 (0) | 2023.03.15 |
[TypeScript] 타입스크립트 추상 클래스 (0) | 2023.03.07 |
타입스크립트 인터페이스 (0) | 2023.03.03 |
타입스크립트 함수 (0) | 2023.03.02 |