강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của whomi
whomi

câu hỏi đã được viết

Bắt đầu với TypeScript

Khả năng tương thích loại

객체 할당 관련 질문 있습니다.

Đã giải quyết

Viết

·

309

0

전체 질문으로 올라가 있었어서 다시 올렸습니다;;


 

1) 4:45에서 "속성이 많을 수록 타입에 더 많은 제약을 가하는 것이고 이는 해당 타입의 값의 집합이 작아지는 것을 의미한다" 고 설명해주셨고,
6:43에서는 "Person의 age 타입을 보면 Product의 타입이 더 크다"고 설명해주셨는데요

그렇다면,
타입이 가질 수 있는 값의 제약이 더 클수록 타입이 작고,
타입이 가질 수 있는 값이 더 유연해질 수록 타입이 크다고 이해하면 되는 걸까요?

2) 아래 코드를 작성해보니

interface Person {
  name: string;
}

interface Product {
  name: string,
  age: number,
}

const obj = {
  name: "mkie",
  age: `23`,
  city: `abc`,
};

let person: Person = obj
let product: Product = obj;

console.log(person.age)

person.age에서 타입 오류가 발생하던데요

그렇다면, person에 obj가 할당은 가능하지만
person의 타입에 정의되지 않은 properties는 사용할 수 없다는 것으로 이해하는게 맞는건지요?

할당 이후에 person을 log로 찍어보면 obj의 properties가 모두 출력되는데
person.age에 접근해보면 타입 오류가 발생하고 있어서 이해가 잘 안되네요

만일 그렇다면 저런 할당이 왜 필요한지도 이해가 안되고....... 실제로 저런식의 할당을 하는 경우는 어떤 것이 있을까요?

 

typescript

Câu trả lời 1

0

landvibe님의 프로필 이미지
landvibe
Người chia sẻ kiến thức

타입이 가질 수 있는 값이 더 유연해질 수록 타입이 크다고 이해하면 되는 걸까요?

네 속성이 많으면 제약이 커지고 결국 값의 집합은 작아집니다.

그렇다면, person에 obj가 할당은 가능하지만
person의 타입에 정의되지 않은 properties는 사용할 수 없다는 것으로 이해하는게 맞는건지요?

네 Person 의 name 조건만 만족하면 할당 가능하므로 obj 는 할당 가능합니다.
person 은 Person 타입이므로 원래 값이었던 obj 는 더 이상 고려 대상이 아닙니다.
Person 타입에 집중하시면 됩니다.

만일 그렇다면 저런 할당이 왜 필요한지도 이해가 안되고....... 실제로 저런식의 할당을 하는 경우는 어떤 것이 있을까요?

상속 관계를 생각해보시면 도움이 될거에요.
자식은 부모에 할당 가능합니다.
예를 들어, 아래 코드에서 d1 은 p1 에 할당 가능합니다.
p1 에는 location 데이터가 들어있지만 마지막 콘솔 로그 부분에서 타입 에러가 발생합니다.
p1 은 Person 타입이기 때문입니다.

interface Person {
name: string;
}
interface Doctor extends Person {
location: string;
}
const d1: Doctor = {name: 'a', location: 'seoul'};
let p1: Person = d1;
console.log(p1.location);

Hình ảnh hồ sơ của whomi
whomi

câu hỏi đã được viết

Đặt câu hỏi