관리 메뉴

Jerry

[TIL] [타임어택9기][리뉴얼] 타입스크립트 올인원 : Part2. lib.es5.d.ts 분석- (15) : 공변성, 반 공변성, 이변성, 불변성 본문

Front/Typescript

[TIL] [타임어택9기][리뉴얼] 타입스크립트 올인원 : Part2. lib.es5.d.ts 분석- (15) : 공변성, 반 공변성, 이변성, 불변성

juicyjerry 2024. 3. 3. 21:28
반응형
공변성, 반 공변성, 이변성, 불변성

 

 

 

 

 

공변성이란?

쉽게 말해, 함수간에 서로 대입할 수 있냐 없냐 따지는 것

function a(x: string): number {
    return +x;
}
a('1'); // 1

type B = (x: string) => number | string;
const b: B = a; // ??????????????????????

 

 리턴값은 더 넓은 타입으로 대입 가능하다

 

 

 

반대로,

function c(x: string): number | string {
    return +x;
}

type D = (x: string) => number;
const d: B = c; // here

 

here 부분은 number | string에서 number로 대입 불가

리턴값이 더 넓은 타입에서 좁은 타입으로 리턴 불가하기 때문

 

 

 

 

 

매개변수

function a(x: string | number): number { // Here
    return 0;
}

type B = (x: string) => number;
let b: B = a;

 

Here 부분

(x: string) => number 또는 (x: number) => number 라고 생각하면 안 된다. 

매개변수는 string | number를 하나로 보고 좁은 타입으로 대입된다. 

리턴값이랑 반대다. 

넓은 타입으로 대입이 안 된다.

 

 

 

 

 

 

참고 자료

https://www.inflearn.com/questions/958865/%ED%95%A8%EC%88%98%EC%9D%98-%EA%B3%B5%EB%B3%80%EC%84%B1%EA%B3%BC-%EB%B0%98%EA%B3%B5%EB%B3%80%EC%84%B1%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%EC%9C%A0-%EC%84%A4%EB%AA%85

반응형