TypeScript Covariant 202101
Yongku cho edited this page Jan 10, 2021
·
12 revisions
- 공변성(Covariant)
- 반공변성(Contravariant)
- variant: 변종, 이형
- co- (prefix): 함께, 같이
- joint, together, with이라는 의미
- 출처
- contra- (prefix): 반대
- against, opposite라는 의미
- 출처
타입 시스템에서는 변성이라는 개념이 있다. List<String>
와 List<Any>
와 같이 기저 타입(List
)가 같고, 타입 인자(String
, Any
)가 다른 여러 타입이 어떤 관계가 있는지 설명하는 개념이다.
-
A ≼ B
: A는 B의 서브타입 -
A → B
: A타입의 인자를 받아서 B타입을 반환하는 함수 타입 -
x : A
: x는 A 타입을 가짐
- 일반적인 공변성 위치에서는 유니언 타입으로 추론
- 함수 인수인 반공변성 위치에서는 인터섹션 타입으로 추론
함수의 인수가 반공변성이라는 증명은 있는 데, infer는 왜 인터섹션 타입으로 추론하는가??