let num1: number = 10;
let num2: 10 = 10;
num1 = num2;
→ 어떤 객체타입을 다른 객체타입으로 취급해도 괜찮은가?
type Animal = {
name: string;
color: String;
};
type Dog = {
name: string;
color: String;
breed: String;
}
let animal: Animal = {
name: "기린",
color: "yellow",
}
let dog: Dog = {
name: "돌돌이",
color: "brown",
breed: "진도",
}
// 공통 프로퍼티가 있는 기준에서 프로퍼티가 더 적은 쪽이 슈퍼 타입임
animal = dog; // O 슈퍼 타입
// dog = animal; // X 서브 타입
// 슈퍼
// type Book = {
// name: string;
// price: number;
// };
// 서브
type ProgrammingBook = {
name: string;
price : number;
skill: string;
};
let book : Book;
let programmingBook: ProgrammingBook = {
name: "한 입 크기로 잘라먹는 리액트",
price: 33000,
skill: "reactjs"
}
book = programmingBook; // O
// programmingBook = book // X
// -----------------------------------------------------
// 위에는 가능한데 이건 왜 안되냐?
/**
* 초과 프로퍼티 검사 -> 객체 리터럴로 정의하면 초과분은 안되도록 막는 검사
*/
type Book = {
name: string;
price: number;
};
let book2: Book = {
name: "한 입 크기로 잘라먹는 리액트",
price: 33000,
// skill: "reactjs"
}
function func(book: Book){}
func({
name: "한 입 크기로 잘라먹는 리액트",
price: 33000,
// skill: "reactjs"
})
// 초과 프로퍼티 검사 피하려면 이렇게 사용하면 허용 됨
let book3: Book = programmingBook;
func(programmingBook);