최종 수정 : 2024-05-28
함수 타입의 호환성
특성 함수 타입을 다른 함수 타입으로 취급해도 괜찮은가.
1) 반환값의 타입이 호환되는가
2) 매개함수의 타입이 호환되는가
1. 반환값이 호환되는가
type A = () => number;
type B = () => 10;
let a: A = () => 10; // number type
let b: B = () => 10; // number literal type
a = b; // 가능 -> 업 캐스팅
b = a; // 불가능 -> 다운 캐스팅
2. 매개변수가 호환되는가
1) 매개변수의 개수가 같을 때
type C = (value: number) => void;
type D = (value: 10) => void;
let c: C = (value) => {};
let d: D = (value) => {};
c = d; // 불가능 -> 업 캐스팅임에도 안 된다.
d = c; // 가능 -> 다운 캐스팅인데 된다.
---------------------------------------------
type Animal = {
name: string;
};
type Dog = {
name: string;
color: string;
};
let animalFunc = (animal: Animal) => {
console.log(animal.name);
};
let dogFunc = (dog: Dog) => {
console.log(dog.name);
console.log(dog.color);
};
animalFunc = dogFunc; // 불가능 -> 업 캐스팅임에도 안 된다.
dogFunc = animalFunc; // 가능 -> 다운 캐스팅인데 된다.
이유는 무엇일까?
2) 매개변수의 개수가 다를 때
type Func1 = (a: number, b: number) => void;
type Func2 = (a: number) => void;
let func1: Func1 = (a, b) => {};
let func2: Func2 = (a) => {};
// 타입이 같을 때만 해당된다.
func1 = func2; // 가능
func2 = func1; // 불가능
'프론트엔드 > TS 공부' 카테고리의 다른 글
타입스크립트의 클래스와 접근 제어자 / 인터페이스와 클래스 (0) | 2024.05.28 |
---|---|
함수 오버로딩 (0) | 2024.05.28 |
함수 타입 정의 / 함수 타입 표현식과 호출 시그니처 (0) | 2024.05.28 |
타입 좁히기 - 타입 가드의 종류 (0) | 2024.05.28 |
타입 단언 (0) | 2024.05.28 |
댓글