type Square = {color : string, width : number}

interface Square { 
	color : string,
	width : number,
} 

let 네모 = { color : 'red', width : 100 }

object 타입 지정할때 type alias를 쓰거나 interface를 쓴다.

interface의 장점 : extends로 복사 가능

interface Student { 
	name : string;
}

interface Teacher extends Student {
	age : number
}

let 학생 : Student = { name : 'kim'};
let 선생 : Teacher = { name : 'kim', age : 20 }

type도 되지않나? intersection type ( extends랑 개념이 다름 )

type Animal = {name : string}
type Cat = { age : number } & Animal

let 고양이 : Cat = {name : 'cat', age : 2 }

type(엄격) vs interface(유연)

interface는 중복 선언 가능 자동으로 합쳐서 타입이 만들어짐. ( 유연하다 )

// 중복 선언했는데 에러가 나지 않음
interface Student { 
	name : string;
}

interface Student { 
	score : number;
}

외부 라이브러리같은 경우 interface로 도배되있다.

다른 사람들이 내 프로젝트를 이용 많이 할 것같으며 object 타입 지정할때 interface 사용 추천

일반 변수 혹은 함수는 type

object는 interface


interace에서 중복 속성이 있다면 에러가 발생

type 의 &는 중복 속성에서 에러가 나지 않음.