일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 타입 좁히기
- app router
- 리터럴 타입
- Cypress
- 이분 검색
- useAppDispatch
- Promise
- async/await
- React
- map
- 인터섹션
- autosize
- tailwind
- recoil
- webpack
- 투포인터
- 공변성
- CORS
- 태그된 유니온
- SSR
- ESlint
- RTK Query
- CI/CD
- 결정 알고리즘
- Jest
- 호이스팅
- TS
- 반공변성
- dfs
- 무한 스크롤
Archives
- Today
- Total
짧은코딩
리턴값, 매개변수의 대입 범위 본문
반응형
공변성, 반공변성
서로 대입할 수 있고 대입할 수 없는 것을 말하는 것이 공변성, 반공변성이다.
리턴값
-대입 가능
function a(x: string): number {
return +x;
}
a("1");
type B = (x: string) => number | string;
const b: B = a;
a 함수가 B에 대입이 가능하다. 왜냐하면 리턴값은 더 넓은 타입에 대입이 가능하기 때문이다.
-대입 불가
function a(x: string): number | string {
return +x;
}
a("1");
type B = (x: string) => number;
const b: B = a;
이와 반대로 더 넓은 타입에서 좁은 타입으로는 대입할 수 없다.
매개변수
-대입 가능
function a(x: string | number): number {
return 0;
}
type B = (x: string) => number;
const b: B = a;
매개변수는 좁은 타입도 대입이 된다.
-대입 불가
function a(x: string): number {
return 0;
}
type B = (x: string | number) => number;
const b: B = a;
"당연히 (x: string) => number는 대입이 가능하다. 하지만 (x: number) => number는 왜 대입이 될까?" => 이렇게 생각하면 안된다.
그냥 매개 변수는 리턴 값이랑 반대라고 생각하면 편하다. 즉 매개 변수는 좁은 타입에서는 대입 가능하지만 넓은 타입은 대입이 안된다.
반응형
'TS > TS(with ZeroCho)' 카테고리의 다른 글
Utility Types (0) | 2022.08.21 |
---|---|
TS와 건망증 (0) | 2022.08.20 |
타입을 만드는 법 (0) | 2022.08.20 |
제네릭 (0) | 2022.08.18 |
TS 기본 기식(2) (0) | 2022.08.17 |
Comments