본문 바로가기
Typescript

interface를 타입으로 사용

by 루에 2022. 1. 5.
반응형

type 키워드가 아니라 interface로도 같은 방법으로 사용할 수 있다.

둘의 사용하는 방법의 차이는 아래와 같다.

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

// interface
interface Person {	// = 이 없음
    name : string;	// 세미콜론으로 함(,도 가능하긴함)
    age : number;
}

 

interface가 type 대비 좋은 점은 extends가 가능하다. class 문법과 비슷한 개념이다.

type도 & 키워드로 비슷한 기능을 사용할 수 있으나, 내부적으로 구동하는 방식에 차이가 있다.

가령 A, B 타입이 있고 C = A & B 라고 하면 이 것은 extends의 의미가 아니라 A도 만족하고 B도 만족하는 C 타입을 만든다는 의미이다.

반면, A extends B 라고 하면 B의 내용을 A에 복사해주는 방식으로 동작한다.

type A = { name : string };
type B = { age : number };

type C = A & B;

let v1: C = { name : "lee", age : 43 };


interface A {
    name : string
}
interface B extends A {
    age : number
}

let v2: B = { name : "lee", age : 34 };

 

interface는 중복 선언이 가능하다. 같은 이름의 interface를 여러개 만들 수 있다. 그런 경우 interface의 데이터가 확장된다고 보면 된다.

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

let v1: Person = { name : "lee", age : 34 };	// 자동으로 extends 되었다고 생각해도 됨

interface Person { name : number }	// 에러. 중복된 값을 넣으려고 하면 에러남

위처럼 중복 선언을 이용해 재정의 혹은 확장을 할 수 있기 때문에 엄격한 type에 비해 유연하다.

 

중복된 키값을 여러번 넣으려고 하면 interface는 에러가 발생하고, type은 데이터 타입이 never로 변경된다. never는 간단하게 절대 완료되지 못하는 오류 라고 생각하면 된다.

 

 

반응형

댓글