개발자

Typescript 에서 type alias vs interface, 어떤걸 주로 사용하시나요?

2023년 04월 06일조회 402

TypeScript에서 함수의 매개변수와 반환값 타입을 지정할 때, 주로 type alias를 사용하시나요, 아니면 interface를 사용하시나요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

김동규님의 프로필 사진

개인적으로 사용하는 기준입니다 외부 통신이나 혹은 변동가능성이 없고 성능이 중요한 부분에는 Type을 사용하구요 내부적으로 DTO, Command, Query 혹은 기타 변동 가능성이나 확장 가능성이 있는 부분에는 Interface를 사용합니다. 타입의 경우엔 타입 검사결과를 캐싱하고 인터페이스의 경우엔 연산 시점에 요소에 대한 검사가 진행된다고 알고 있어 성능의 경우 타입이 좋지만 기타 확장성이나 재선언 혹은 extends 등 interface 를 사용하였을 때 가져다주는 이점이 큼에 따라서 개인적으로는 보통 interface를 주로 사용합니다

진성주님의 프로필 사진

https://stackoverflow.com/questions/37233735/interfaces-vs-types-in-typescript/52682220 스택오버플로우에서 거의 7년동안 결론이 안난 부분이라 딱 짤라서 무엇을 써라할 것은 없을거 같고 팀 컨벤션을 따라가는게 좋을거 같고 없다면 팀원들의 익숙함과 능숙함을 따져서 정할거 같습니다.

커리어리 AI 봇님의 프로필 사진

TypeScript에서 ' type alias '와 ' interface '는 비슷한 목적으로 사용되지만, 약간의 차이와 사용 사례가 있습니다. 각각의 특징과 사용 사례를 이해하고 적절한 경우에 사용하는 것이 좋습니다. #1 Type alias ' type alias '는 새로운 타입을 정의할 때 사용합니다. 기본 타입, 객체, 함수, 유니언, 인터섹션 등의 타입을 결합할 수 있습니다. TypeScript 2.7부터 type alias는 선언 병합이 지원되지 않습니다. #2Interface ' interface '는 클래스와 객체를 위한 타입 정의를 제공합니다. ' interface '는 선언 병합을 지원하므로 여러 곳에서 같은 이름의 인터페이스를 정의할 수 있고, 이를 자동으로 병합합니다. #2의 코드에서는 ' Point ' 인터페이스가 자동으로 병합되어 'x', 'y', 'z' 세 속성을 포함합니다. 어떤 것을 사용해야 할까요? 둘 중 어떤 것을 사용할지 결정할 때 고려해야 할 몇 가지 요소가 있습니다. 1. 선언 병합이 필요한 경우: ' interface '를 사용하세요. 2. 유니언, 인터섹션 등의 복잡한 타입을 다루는 경우: ' type alias '를 사용하세요. 3. 클래스 구현이 필요한 경우: ' interface '를 사용하세요. 결국, 프로젝트의 요구 사항과 개발 팀의 코딩 스타일에 따라 적절한 것을 선택하면 됩니다. 일반적으로 객체 타입을 정의할 때는 ' interface '를 사용하고, 복잡한 타입 조합이 필요한 경우에는 ' type alias '를 사용하는 것이 좋습니다. 또한, 프로젝트 전반에 걸쳐 일관성 있는 코딩 스타일을 유지하는 것이 중요합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#1
type Point = {
  x: number;
  y: number;
};

type PointFunc = (x: number, y: number) => Point;


#2
interface Point {
  x: number;
  y: number;
}

interface Point {
  z: number;
}

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!