TypeScript - Type과 Interface의 차이점

김서영·2024년 2월 21일
0

Type과 Interface의 차이점

type과 interface가 뭐야?

type과 interface는 모두 타입스크립트에서 객체의 타입, 함수의 타입 등을 정의하는 것들이다!

확장(상속)하는 법

interface

extends 키워드를 활용해 확장

interface Person {
  name: string;
  age: number;
}

interface Work extends Person { // 확장(상속)
  job: string;
}

const seoyeong: Work = {
  name: 'seoyeong',
  age: 28,
  job: 'developer'
}

type

& 기호를 활용해 확장

type Person = {
  name: string,
  age: number
}

type Work = Person & { // 확장(상속)
  job: string
}

const seoyeong: Work = {
  name: 'seoyeong',
  age: 28,
  job: 'developer'
}

선언적 확장

interface

선언적 확장(Declaration Merging)이 가능
같은 이름의 interface를 선언하면 자동으로 확장된다!

interface Person {
  name: string;
  age: number;
}

interface Person { // 선언적 확장
  ismarried: boolean;
}

const seoyeong: Person = {
  name: 'seoyeong',
  age: 28,
  ismarried: false
}

type

선언적 확장 불가능!

type Person = {
  name: string;
  age: number;
}

type Person = { // ❗️Error: Duplicate identifier 'Person'.
  ismarried: boolean;
}

=> 타입 객체의 확장성을 위해서는 interface를 활용하자

자료형

interface

객체(Object)의 타입을 설정할 때 사용할 수 있으며, 원시 자료형에는 사용할 수 없다.

interface Person {
  name: string;
  age: number;
  ismarried: boolean;
}
interface name extends string { // ❌ 불가능
  ...
}

type

객체 타입을 정의할 때도 사용할 수 있지만, 객체 타입을 정의할 때는 interface를 사용하는게 좋고,
단순한 원시값(Primitive Type)이나 튜플(Tuple), 유니언(Union) 타입을 선언할 때 type을 사용하는 것이 좋다.

type Name = string; // primitive type
type Age = number;
type Person = [string, number, boolean]; // tuple
type NumberString = string | number; // union
type Person = { // 객체는 interface를 사용하도록 하자.
  name: string,
  age: number,
  ismarried: boolean
}

computed value 사용

interface

computed value 사용이 불가능

type Subjects = 'math' | 'science' | 'sociology';

interface Grades {
  [key in Subjects]: string; // ❗️Error: A mapped type may not declare properties or methods.
}

type

computed value 사용이 가능

type Subjects = 'math' | 'science' | 'sociology';

type Grades = {
  [key in Subjects]: string;
}

정리

type은 모든 타입을 선언할 때 사용 가능, 확장 불가능
interfacce는 객체에 대한 타입을 선언할 때 사용 가능, 확장 가능
어떤걸 사용해야 할지 모를때는 interface를 사용하고, type의 특성이 필요할 때만 type을 사용해도 된다고 한다!

profile
개발과 지식의 성장을 즐기는 개발자

0개의 댓글

관련 채용 정보