공변성과 반공변성
427
8 asked
제가 공변성과 반공변성을 공부하는데 너무 큰 어려움이 있었어서, 원리가 너무 궁금해서 나름대로 결론을 내려보았습니다.
저는 개인적으로 함수의 동작 과정인,
input - process - output 의 방향대로,
타입을 만족하기 위하여 이런 순서로 검사하는게 아닐까... 생각해보았습니다.
function a(x: string | number): number { return 0;}type B = (x: string) => number | string;let b: B = a;
강의 속 코드를 가져와봤습니다.
제가 하고 싶은 말의 요지는,
다음 순서를 만족하기 위해서 타입의 크기 비교가 달라진다는 것이지요.
1) b의 매개변수 타입을 검사
2) a의 매개변수 타입을 검사
3) a의 리턴 타입을 검사
4) b의 리턴 타입을 검사
검증해보기 위해서,
b("1") 이라는 코드를 입력하면,
b("1") 실행 :
먼저 b의 타입인 B의 매개변수가 검사되어,
(x: string) 를 만족하는지 확인(b = a이므로)
b("1")에 의해 a("1")가 실행 :
따라서 a의 매개변수 타입이 검사되어,
(x: string | number) 를 만족하는지 확인.a("1")의 결과인 0 :
a의 리턴 타입을 검사하여,
number를 반환하는 지 확인.b("1")의 결과인, a("1")의 결과인 0 :
b의 리턴 타입을 검사하여,
number | string을 반환하는 지 확인.
타입스크립트가 실제로 이런 식으로 추론하는지는 알지 못하지만, 흥미로운 생각인 것 같아서 나누어보았습니다.
개인적인 의견이고,
옳지 않은 내용이 있다면 삭제하겠습니다!
Answer 1
0
https://www.inflearn.com/questions/958865
이것도 읽어보셨나요?
데코레이터가 현재도 자주 쓰이는 문법인가요?
0
76
2
유틸리티 타입 실제로 구현은 못해도 하나씩 외우면 실무할 때 지장 없겠죠?
0
63
1
매핑 타입은 type에서밖에 안된다고 하네요?
0
62
2
자바에서의 오버로딩과 같은 개념이라고 생각해도 되나요?
0
67
2
filter 함수 반환 타입 네로잉 질문
0
68
2
map<U>(callbackfn: ....) 할때 U는 왜 여기 있는거에요??
0
44
2
ts 컴파일을 위한 type 라벨링 부분
0
44
1
concat 함수 타입 구현 중 질문 있습니다!
0
99
2
filter 메소드 질문
0
52
1
forEach 제네릭 관련 문의
0
59
1
타입 추론 시 가장 넓은 범위로 추론이 되는 건가요?
0
162
1
enum이 javascript로 트랜스파일링될때 사라진다하셨는데요
0
206
1
함수 파라미터 타입 정의 시 ...args: any[]와 ...args: any 의 차이
0
223
1
Flat type에서 ReadonlyArray 타입을 사용하는 이유?
0
157
1
bind type 질문
1
147
1
Lowercase type 관련 질문
0
151
1
key-value 타입 자동추론 질문드립니다
0
264
1
타입스크립트 교과서, p131
0
264
1
타입스크립트 교과서 p122 forEach 메서드 질문
0
231
1
타입스크립트 교과서 p116 , 코드에러남
1
268
1
타입스크립트 교과서 p112 , 코드가 안읽힙니다..
0
263
1
타입스크립트 교과서 p83
1
181
1
타입스크립트교과서 p39 쪽 코드가 이해가 안되요
1
224
1
class 에서 ts의 private vs js의 private field( # )
0
334
1

