일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘
- 백준
- 코드스테이츠
- 파이썬
- 타입스크립트 올인원
- 리액트
- 리트코드
- 제로초
- LeetCode
- 렛츠기릿 자바스크립트
- javascript
- 회고
- js
- til
- codestates
- 토익
- 코어 자바스크립트
- programmers
- SQL 고득점 Kit
- 4주 프로젝트
- 타입스크립트
- 리덕스
- 정재남
- 2주 프로젝트
- 프로그래머스
- 타임어택
- python
- 손에 익히며 배우는 네트워크 첫걸음
- 자바스크립트
- Async
Archives
- Today
- Total
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를 하나로 보고 좁은 타입으로 대입된다.
리턴값이랑 반대다.
넓은 타입으로 대입이 안 된다.
참고 자료
반응형