함수의 타입끼리도 호환이 가능하다.
호환이라는 것의 정의는 아래와 같이 정의할 수 있다.
- 특정 함수 타입을 다른 함수 타입으로 취급해도 괜찮은가를 판단하는 것
즉, 변수에 다른 변수를 넣듯이 타입 또한 호환이 가능한 것이다. 타입 호환의 기준은 아래와 같다.
1. 반환값의 타입이 호환되는가
2. 매개변수의 타입이 호환되는가
기준1. 반환값이 호환되는가
type A = () => number;
type B = () => 10;
let a:A = () => 10;
let b:B = () => 10;
A 타입과 B 타입을 구성하고 이를 타입으로 사용하는 함수를 만들었을 때
a = b; //업캐스팅이므로 가능
// b = a; //다운캐스팅이므로 불가능
기존처럼 업캐스팅일 경우에만 호환된다.
기준2. 매개변수가 호환되는가
2-1. 매개변수의 개수가 같을 때
type C = (value: number) => void;
type D = (value: 10) => void;
let c:C = (value) => {};
let d:D = (value) => {};
//c = d; //업캐스팅이므로 불가능
d = c; //다운캐스팅이므로 가능
매개변수의 개수가 같을 때는 오히려 반대로 '다운캐스팅' 의 경우에만 호환이 된다.
2-2. 매개변수의 개수가 다를 때 (모든 매개변수의 타입이 같은 경우)
type Func1 = (a: number, b: number) => void;
type Func2 = (a: number) => void;
let func1: Func1 = (a, b) => {};
let func2: Func2 = (a) => {};
func1 = func2; //func1이 매개변수가 많으므로 가능
//func2 = func1;
매개변수가 다른 경우엔 매개변수가 적은 쪽이 많은 쪽에 호환이 된다.
'프로그래밍 > 타입스크립트' 카테고리의 다른 글
타입스크립트 - 사용자 정의 타입 가드 (0) | 2025.02.14 |
---|---|
타입스크립트 - 함수 오버로딩 (0) | 2025.02.14 |
타입스크립트 - 함수 타입 표현식과 호출 시그니처 (0) | 2025.02.14 |
타입스크립트 - 함수 타입 (0) | 2025.02.14 |
타입스크립트 이해 (0) | 2025.02.13 |