반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

리턴값, 매개변수의 대입 범위 본문

TS/TS(with ZeroCho)

리턴값, 매개변수의 대입 범위

5_hyun 2022. 8. 20. 18:25

공변성, 반공변성

서로 대입할 수 있고 대입할 수 없는 것을 말하는 것이 공변성, 반공변성이다.

리턴값

-대입 가능

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는 왜 대입이 될까?" => 이렇게 생각하면 안된다.

그냥 매개 변수는 리턴 값이랑 반대라고 생각하면 편하다. 즉 매개 변수는 좁은 타입에서는 대입 가능하지만 넓은 타입은 대입이 안된다.

728x90
반응형

'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