본문 바로가기
강의 실습/한 입 크기로 잘라먹는 타입스크립트(TypeScript)

객체 타입의 호환성

by Jint 2024. 8. 6.

한 입 크기로 잘라먹는 타입스크립트 - 객체 타입의 호환성

타입스크립트 파일 이름 수정 후 오류가 남아있다면, Ctrl + Shift + P 누르고 restart 명령어 실행.

1. 객체 타입간의 호환성
기본 타입 간의 호환성 : 특정 타입을 다른 타입으로 취급해도 괜찮은지 판단하는 것.
객체 타입 간의 호환성 : 어떤 객체 타입을 다른 객체 타입으로 취급해도 괜찮은지 판단하는 것.

- src/chapter3.ts

// 기본 타입 간의 호환성
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; // 업캐스팅
// dog = animal; // 다운캐스팅 : 오류

// 연습
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; // 업캐스팅
// programmingBook = book; // 다운캐스팅


타입스크립트는 프로퍼티를 기준으로 타입을 정의하는 '구조적 타입 시스템' 을 따른다.

2. 초과 프로퍼티 검사
초과 프로퍼티 검사 : 변수 초기화시 초기화하는 값으로 객체 리터럴을 사용하면 발동하는 검사로, 초과 프로퍼티를 작성하지 못하도록 막는 검사.
따라서, 객체 타입에 정의된 프로퍼티만 넣을 수 있도록 해야 한다.
함수 호출시 매개변수로 객체 리터럴을 사용해도 초과 프로퍼티 검사가 이루어진다.

- src/chapter3.ts

...
// 가능
book = programmingBook; // 업캐스팅
// programmingBook = book; // 다운캐스팅

// 불가능
// 초과 프로퍼티 검사
let book2: Book = { // 오류 발생
    name: '한 입 크기로 잘라먹는 리액트'
  , price: 33000
  // , skill: 'reactjs'
}

// 초과 프로퍼티 검사 방지
let book3: Book = programmingBook;

// 함수 호출시 매개변수에서도 초과 프로퍼티 검사 이루어짐
function func(book: Book) {}
func({
    name: '한 입 크기로 잘라먹는 리액트'
  , price: 33000
  // , skill: 'reactjs'
});

// 초과 프로퍼티 검사 방지
func(programmingBook);



참고링크 : https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8#

 

한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런

이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻‍♀️로 만들어드립니다., 프론

www.inflearn.com

댓글