inflearn logo
강의

講義

知識共有

TypeScriptを始める

タイプ互換性

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

解決済みの質問

326

whomi

投稿した質問数 5

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

回答 1

0

landvibe

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

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

그렇다면, 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);

lodash 가 안될때

0

90

1

에궁 처음부터 막히네요...ㅜㅜ

0

75

1

[함수타입2] 함수 this에 대한 타입 부분, 제가 제대로 이해했을까요?

0

265

1

퀴즈 관련 질문이 있습니다.

0

343

1

공변성 강의

0

255

2

시간 4:31 인터페이스 타입가드에 대해

0

231

1

리턴값이 연산인 제네릭 에러 해결

0

427

2

code runner 사용 시 output이 깨지는 문제

0

2456

2

2: 38

0

196

1

5:55 내용에 대하여 질문드립니다.

0

440

2

extends에 관하여

0

293

1

return 타입

0

177

1

/bin/sh: node_modules/.bin/ts-node: No such file or directory 오류

0

363

1

Person 과 Product

0

208

1

tsc 기본이 es3

0

313

1

[#다시질문] Person과 Product 관계

0

160

1

타입스크립트 부분실행 질문드립니다

0

711

1

함수 타입2 에서 1:53

0

329

2

1:19 에서 interface String

1

272

2

안녕하세영 정리

0

166

1

this 질문

0

221

1

function add

0

177

2

타입스크립트 사용하는 이유 : 높은 생산성

0

197

2

코드

0

173

1