TypeScript Covariant 202101 - ChoDragon9/posts GitHub Wiki

๋‹จ์–ด ํ•ด์„

  • ๊ณต๋ณ€์„ฑ(Covariant)
  • ๋ฐ˜๊ณต๋ณ€์„ฑ(Contravariant)

๋ถ„๋ฆฌ

  • variant: ๋ณ€์ข…, ์ดํ˜•
  • co- (prefix): ํ•จ๊ป˜, ๊ฐ™์ด
    • joint, together, with์ด๋ผ๋Š” ์˜๋ฏธ
    • ์ถœ์ฒ˜
  • contra- (prefix): ๋ฐ˜๋Œ€

๋ณ€์„ฑ

์ถœ์ฒ˜

ํƒ€์ž… ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ณ€์„ฑ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๋‹ค. List<String>์™€ List<Any>์™€ ๊ฐ™์ด ๊ธฐ์ € ํƒ€์ž…(List)๊ฐ€ ๊ฐ™๊ณ , ํƒ€์ž… ์ธ์ž(String, Any)๊ฐ€ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํƒ€์ž…์ด ์–ด๋–ค ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.

๊ธฐํ˜ธ ํ‘œ๊ธฐ๋ฒ•

์ถœ์ฒ˜

  • A โ‰ผ B: A๋Š” B์˜ ์„œ๋ธŒํƒ€์ž…
  • A โ†’ B: Aํƒ€์ž…์˜ ์ธ์ž๋ฅผ ๋ฐ›์•„์„œ Bํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ํƒ€์ž…
  • x : A: x๋Š” A ํƒ€์ž…์„ ๊ฐ€์ง

ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๊ฐ€ ๋ฐ˜๊ณต๋ณ€์„ฑ๋ผ๋Š” ์ฆ๋ช…

์ถœ์ฒ˜

infer

์ถœ์ฒ˜

  • ์ผ๋ฐ˜์ ์ธ ๊ณต๋ณ€์„ฑ ์œ„์น˜์—์„œ๋Š” ์œ ๋‹ˆ์–ธ ํƒ€์ž…์œผ๋กœ ์ถ”๋ก 
  • ํ•จ์ˆ˜ ์ธ์ˆ˜์ธ ๋ฐ˜๊ณต๋ณ€์„ฑ ์œ„์น˜์—์„œ๋Š” ์ธํ„ฐ์„น์…˜ ํƒ€์ž…์œผ๋กœ ์ถ”๋ก 

ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๊ฐ€ ๋ฐ˜๊ณต๋ณ€์„ฑ์ด๋ผ๋Š” ์ฆ๋ช…์€ ์žˆ๋Š” ๋ฐ, infer๋Š” ์™œ ์ธํ„ฐ์„น์…˜ ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ํ•˜๋Š”๊ฐ€??

Covariant์™€ Union type, Contravariant์™€ Intersaction type

https://arxiv.org/pdf/1809.01427.pdf

โš ๏ธ **GitHub.com Fallback** โš ๏ธ