배경: as키워드로 타입 단언을 하려할 때, interface로 하면 에러가 발생했다. 평소, type과 interface의 차이를 모른채 사용하고 있었는데 이 기회에 차이점을 정리한다.
type
type order = {
menu: string,
quantity: number,
}
type DetailOrder = order & { Requirements: string }
interface
type CoffeeCup = {
shots: number;
hasMilk?: boolean;
hasSugar?: boolean;
};
// interface로 필수규격을 정의해서, 다양한 커피기계를 만들 수 있다.
interface CoffeeMaker {
makeCoffee(shots: number): CoffeeCup;
}
class americanoMachine implements CoffeeMaker {
constructor(coffeeBeans: number) {
this.coffeeBeans = coffeeBeans;
}
makeCoffee() {
return extractCoffee();
}
}
class LatteeMachine implements coffeeMaker {
constructor(coffeeBeans: number) {
this.coffeeBeans = coffeeBeans;
}
makeCoffee() {
const coffee = extractCoffee();
return addMilk(coffee);
}
addMilk(coffee: CoffeeCup) {
return {
...coffee,
hasMilk: true,
}
}
}
// 참고: 드림코딩 엘리(<https://academy.dream-coding.com/courses/typescript>)
정리