// 타입을 쓰고 싶다면, type 키워드를 쓰면 됨
type PlayerA = {
name: string
}
type PlayerAA = PlayerA & {
lastName: string
}
const playerA: PlayerAA = {
name: "nico",
lastName: "nomad"
}
/////
interface PlayerB {
name: string
}
interface PlayerB {
lastName: string
}
interface PlayerB {
health: number
// 인터페이스에서는 중복 선언 가능!!
}
const PlayerB: PlayerB = {
name: "nico",
lastName: "nomad",
health: 0
}
// 이 것만 봐서는 인터페이스, 타입을 구분할 수 없음!, 하지만 용도가 다름
// 원한다면 인터페이스와 타입 모두 추상 클래스를 대체해서 쓸 수 있음
type PlayerA = {
firstName: string
}
interface PlayerB {
firstName: string
}
class User implements PlayerA {
constructor(
public firstName: string
){}
}
// 모양, 상속하는 방법, 새로운 property를 넣어주는 방법을 빼더라도
// 두 개가 이루고자 하는 목적은 같음
// 상속하는 방법도 같고, 둘 다 추상 클래스를 대체할 수 있음
// 인터페이스 - 클래스나, 오브젝트의 모양을 정의하고 싶을 때
// -> 상속받는 방법이 직관적임
// 타입 - 다른 모든 경우
타입과 인터페이스는 매우 유사해서 둘 중에 하나를 자유롭게 선택해서 쓰면 됨
type은 = Animal & {} 이런식으로 계속 합집합으로~