interface는 구조 중심(객체 지향) 설계에, => 클래스나 오브젝트를 정할 때
type은 유연하고 복잡한 타입 조합에 적합 => 그 외의 경우에
number, string, boolean, null, undefined 타입
<type을 사용하는 경우>
type name = string;
<interface를 사용하는 경우>
interface에서는 직접적 사용이 불가능.
왜냐면, interface는 객체 유형만 사용 가능함
여러 타입 중 하나의 타입을 가지는 타입으로
|을 사용
<type을 사용하는 경우>
type Team = "red" | "pink" | "yellow";
type union = number | string;
<interface를 사용하는 경우>
interface에서는 직접적 사용이 불가능.
하지만, 두 개 이상의 인터페이스를 결합해서 새로운 유니온 생성은 가능
interface Team {
color: string;
}
interface Health {
weight: number;
}
type = Team | Heath;
type과 interface는 모두 함수 타입을 사용할 수 있음.
interface는 : 사용 / type은 =>을 사용
<type을 사용하는 경우>
type myFunc = (arg1: number, arg2: number) => number;
<interface를 사용하는 경우>
interface myFunc {
(arg1: number, arg2: number): number;
}
<type을 사용하는 경우>
지원 안함
<interface를 사용하는 경우>
interface Person {
name: string;
}
interface Person {
age: number;
}
interface는 자동으로 병합해준다.
<type을 사용하는 경우>
type User = {
name: string;
}
type Player = User & {
age: number;
}
const Human: Player = {
name: 'k',
age: 10
}
console.log(Human); // { "name":"k", "age": 10}
<interface를 사용하는 경우>
interface User {
name: string;
}
interface Player extends User {
age: number;
}
const Human: Player = {
name: 'k',
age: 10
}
console.log(Human); // { "name": "k", "age": 10}