인프런 커뮤니티 질문&답변

Prov님의 프로필 이미지
Prov

작성한 질문수

타입스크립트 시작하기

타입 호환성

Person과 Product의 관계

작성

·

168

0

안녕하세요

혹시 Person과 Product의 관계를 제가 이렇게 이해했는데

맞을까요 ?

interface 선언된 Person에 속성값이 많으면 많을 수록

1.구체적(?)으로 변하기 때문에 속성값이 없는 쪽이 더 많은 값을 할당 받을 수 있다고 생각해도 될까요 ?

2.다른 생각으로는 const test1 : Test={}이렇게 생긴 녀석은

모든걸 포괄할 수 있는 최상위 녀석이라고 생각해도 되는걸가요?

3.f1 = f2 와 f2= f1 의 관계에서  f2는 b: string | ( OR연산 ) number  와 같다고 생각하면 되는건가요 ?

4. f2 = f1의 관계도 이해가 조금 안 됩니다 ㅠㅠ

제가 생각하기론 f1은 b타입이 string인데 f2역시 b타입을 string으로 취할 수 있어 가능하다고 생각하는데 혹시 어느 부분에서 안되는건가요 ? number때문인가요 ?

5.f1=f2역시 f2의 b는 string | number 인데 

f1(1,1);이 오류가 나는 이유를 모르겠습니다.

f1(1,1);이 실행되면 f2가 가 호출되어

b의 type이 string | number이기 때문에 1이 number로 인식 되어 정상적으로 결과를 출력해야 맞는것이 아닌가요 ?!

답변 1

1

이재승님의 프로필 이미지
이재승
지식공유자

안녕하세요

1. 맞습니다

2. 맞습니다. 다만 작성하신건 타입이라기 보다는 값이구요. 좀 더 정확한 표현은 `interface Test {}` 가 되겠네요

3. 제가 이해를 못했습니다. f2 의 타입은 F2 이고, F2 에서 매개변수 b 의 타입은 `string | number` 입니다

4. F1 이라는 함수 타입은 매개변수 b 가 문자열인 것만 처리할 수 있습니다. F2 는 문자열과 숫자 모두를 처리할 수 있습니다. 따라서 F2 함수 타입으로 만든 f2 를 사용(호출)하는 사람은 매개변수 b 에 숫자도 입력 가능합니다.
그런데 F1 의 매개변수 b 는 숫자를 처리할 수 없으므로 f1 을 f2 처럼 사용(호출)할 수 없습니다. 따라서 `f2 = f1;` 코드는 문제(에러)가 되는 것입니다. F2 가 F1 보다 유연하다고 할 수 있습니다. 
반대로 `f1 = f2;` 할당은 괜찮습니다. 문자열과 숫자를 처리할 수 있는 똑똑한 f2 를 f1 처럼 문자열만 입력하면서 사용할테니 전혀 문제(에러)가 되지 않습니다.

5. 타입과 값을 헷갈리시는 것 같아요. (많은 분들이 헷갈려 하십니다^^)
값을 할당한다고 타입이 변하지 않습니다. f1 은 문자열만 입력 가능한 타입이라고 선언을 했고, 그 사실은 변하지 않습니다. f2 라는 값은 문자열과 숫자를 모두 처리할 수 있도록 구현됐습니다. 하지만 f1 의 타입에 명시된 대로 문자열만 입력해서 사용할 겁니다. 그렇게 사용해도 전혀 문제가 되지 않습니다. 왜냐면 f2 는 문자열을 처리할 수 있으니까요.

Prov님의 프로필 이미지
Prov
질문자

감사합니다 

" ~ 처럼 사용하겠다 " 라는 말이 확 와닿았습니다!

Prov님의 프로필 이미지
Prov
질문자

선생님 그러면

여기서 "="의 의미는 변수처럼 덮어씌우기 같은 대입의 의미가 아니라

ex ) int a=1;

~처럼 사용하겠다라는 의미로 생각해야하나요 ?

이재승님의 프로필 이미지
이재승
지식공유자

아니요 대입이 맞습니다 :)

Prov님의 프로필 이미지
Prov

작성한 질문수

질문하기