2021. 4. 23. 22:44ㆍ웹 프론트엔드 깊게 이해하기/타입스크립트 이해하기
Type 과 Interface 는 매우 유사한 기능들을 가지고 있고, 실제로 대부분의 프로젝트에서 개발자는 둘 중 어느 것을 선택해서 사용해도 상관 없을 경우가 많습니다. interface 에서 사용할 수 있는 기능의 대부분은 type 에서도 사용 가능한 경우가 많기 때문입니다.
차이점 1 : 선언 후 타입 확장성

하지만 그렇다고 해서 아예 둘의 차이가 전무한 것은 아닙니다. 둘의 가장 큰 차이점은 type 은 선언 시점에서 그 내용을 고칠 수 없는데 반해, interface 는 선언 후에도 얼마든지 다른 곳에서 내용을 확장할 수 있다는 점에 있습니다.
차이점 2 : 유틸리티 함수를 통해 만들 수 있는 것은 오직 type
type 은 타입스크립트에서 제공하는 유틸리티 함수를 써서 기존의 type 이나 interface 를 이용하여 새로운 type 을 만들어 낼수 있습니다. index signature 등의 편리한 기능도 interface 에서는 사용할 수 없습니다.
interface Todo {
title: string;
description: string;
completed: boolean;
}
type TodoPreview = Pick<Todo, 'title' | 'completed'>;
(출저 : https://typescript-kr.github.io/pages/utility-types.html)
따라서 type 은 매번 새로운 객체를 생성하고, 합성하는 일이 자주 일어나는 함수형 프로그래밍 방식에 적합하다고 말할 수 있습니다.
차이점 3 : Class에 적용할 타입을 생성하고, 선언 병합을 쓸 수 있는 것은 오직 interface
interface 는 객체 뿐만 아니라 클래스의 타입을 지정하는데에도 사용됩니다. 또한 클래스나 객체의 메서드에 오버로드를 적용할 수 있습니다(메서드가 아닌 멤버 속성은 오버로드 할수 없습니다). 따라서 이 방식은 클래스를 많이 생성하고 상속, 확장을 주로 하게 되는 객체 지향 프로그래밍 방식에 적합하다고 말할 수 있습니다.
interface Box {
height: number;
width: number;
}
interface Box {
scale: number;
}
let box: Box = {height: 5, width: 6, scale: 10};
interface Cloner {
clone(animal: Animal): Animal;
}
interface Cloner {
clone(animal: Sheep): Sheep;
}
interface Cloner {
clone(animal: Dog): Dog;
clone(animal: Cat): Cat;
}
(출저 : https://typescript-kr.github.io/pages/declaration-merging.html)
리액트에 적용할 때는 무엇을 써야 할까?
[Typescript] Type Alias vs. Interface
[Typescript] Type Alias vs. Interface
TIL 2021.01.19 Type Alis vs. Interface
velog.io
타입스크립트의 Type 은 타입 내에 union 타입이 들어가는 순간 상속, 확장의 기능인 extends 와 implements를 사용할 수 없게 됩니다. 그러니 정말 많은 소프트웨어 개발의 핵심인 '상속과 확장에 있어서 Type 은 Interface 에 비해 더 높은 우선순위를 가질 수 없다고 결론 내릴 수 있을 것입니다.
type 키워드는 union 과 tuple 타입이 필요한 경우에만 사용하는 것이 바람직합니다.