프론트엔드 개발/Typescript

[타입스크립트 1분 상식] 인터페이스 존재 이유(feat. type alias)

하이고니 2023. 3. 9. 01:12

 

 

 

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