deep-dive-everything / typescript-with-react

우아한 타입스크립트 with 리액트 스터디
0 stars 0 forks source link

다음 코드에서 cat을 할당할 수 있는 이유는 무엇일까요? #1

Closed kwonhygge closed 1 month ago

kwonhygge commented 1 month ago

📚 44p - 45p 📌 다음 코드에서 cat을 할당할 수 있는 이유는 무엇일까요?

interface Pet {
   name: string;
   }

interface Cat {
name: string;
age: number;
}

let pet: Pet;
let cat: Cat = { name: "Lucy", age: 5 };

pet = cat; // OK
hotdog1004 commented 1 month ago

타입스크립트는 구조적 서브타이핑을 따르기 때문에 이름이 다른 객체라도 가진 속성이 동일하다면 서로 호환이 가능한 동일한 타입이라 여깁니다.

Cat은 Pet이 갖고 있는 name이라는 속성을 가지고 있습니다. 따라서 Cat 타입으로 선언한 cat을 Pet 타입으로 선언한 pet에 할당할 수 있습니다.

kwonhygge commented 1 month ago

타입스크립트는 구조적 서브타이핑에 기반하여 동작하므로 타입의 이름이 달라도 동일한 속성을 가지고 있다면 타입호환이 가능합니다.

limejin commented 1 month ago

타입 스크립트의 타입 시스템은 구조적 서브타이핑에 기반하고 있다. 구조적 서브 타이핑 : 이름이 다른 객체라도 가진 속성이 동일하다면 서로 호환이 가능한 동일한 타입으로 여김 Cat과 Pet이 다른 타입으로 선언되었지만 name이라는 송성을 가지고 있기에 Cat 타입 cat을 Pet 타입 pet에 할당 가능하다.

samseburn commented 1 month ago

타입스크립트는 구조적 타이핑을 사용하기 때문에, 객체가 동일한 속성을 가지고 있다면 서로 다른 타입 간에도 호환이 가능합니다.

구조적 타이핑에서는 타입 이름 자체가 중요한 것이 아니라, 타입의 구조가 중요합니다.

devsomda commented 1 month ago

타입스크립트는 구조적 타이핑을 사용하여, 필요한 속성만 일치하면 할당을 허용합니다. Cat 인터페이스는 name과 age를 모두 가지면서 동시에 Pet이 요구하는 속성인 name을 포함하고 있으므로 할당이 가능합니다.