본문 바로가기
프로그래밍/타입스크립트

타입스크립트 - 함수 타입의 호환성

by Programmer.Junny 2025. 2. 14.

함수의 타입끼리도 호환이 가능하다.

호환이라는 것의 정의는 아래와 같이 정의할 수 있다.

- 특정 함수 타입을 다른 함수 타입으로 취급해도 괜찮은가를 판단하는 것

즉, 변수에 다른 변수를 넣듯이 타입 또한 호환이 가능한 것이다. 타입 호환의 기준은 아래와 같다.

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;

매개변수가 다른 경우엔 매개변수가 적은 쪽이 많은 쪽에 호환이 된다.

최근댓글

최근글

skin by © 2024 ttuttak