Woowahan-TS / woowahan-ts

우아한 타입스크립트 스터디
6 stars 2 forks source link

[8장] 공변성과 반공변성 #55

Closed jinsupark4255 closed 1 month ago

jinsupark4255 commented 1 month ago

📝 p.279 - p.280

🧐 공변성과 반공변성의 의미를 설명해주시고, 일반 타입과 제네릭 타입이 가지고 있는 차이를 '공변성, 반공변성'을 활용하여 설명해주세요.

jinsupark4255 commented 1 month ago

공변성과 반공변성의 의미

공변성

반공변성

일반 타입과 제네릭 타입의 차이

interface Member extends User { nickName: string; }

let users: Array = []; let members: Array = [];

users = members; // 정상 작동 members = uses; // 에러


- 제네릭 타입 코드 예시
```tsx
type PrintUserInfo<U extends User> = (user: U) => void;

let printUser: PrintUserInfo<User> = (user) => console.log(user.id);

let printMember: PrintUserInfo<Member> = (user) => console.log(user.id, user.nickName);

printMember = printUser; // 정상 작동
printUser = printMember; // 에러
YunjiNam commented 1 month ago

공변성이란 타입 계층의 방향을 그대로 유지하는 성질로 좁은 타입으로 선언한 변수에 넓은 타입으로 선언한 변수가 할당 가능한 것을 말한다. 반공변성은 타입 계층의 방향이 반대로 적용되는 성질로 넓은 타입으로 선언한 변수에 좁은 타입으로 선언한 변수가 할당 가능한 것을 말한다. 아직 정확하게 이해하지 못해서 답변을 여기까지만 적어봤습니다ㅜㅜ 첨부한 참고문서 보면서 이해하려고 노력중입니다... 참고문서