Language/TypeScript

TypeScript 기본 개념 공부 #2

hu6r1s 2023. 4. 6. 01:25

Call Signatures

2023.04.04 - [Language/TypeScript] - TypeScript 기본 개념 공부 #1

 

TypeScript 기본 개념 공부 #1

공부 이유 타입스크립트를 이전에 진행한 프로젝트(해킹대회 사이트 개발 - 추후에 포스팅할 예정)에서 별로 모르는 상태로 처음 써보고 괜찮은 언어라고 생각되며 많은 기업에서 타입스크립트

hu-bris.tistory.com

이전 포스트를 보면 함수의 인자 타입을 지정해줘야 한다.

function add(a: number, b: number) {
 return a + b;
}

const add = (a: number, b: number) => a + b		// arrow function

원래는 리컨 값의 타입도 정해줘야 하지만 어차피 인자들이 number 타입이기 때문에 number로 리턴 값이 되어 있을 것이다.

call signature은 마우스를 올렸을 때 나오는 인자(arguments)의 타입과 함수의 반환 타입 정보들을 말한다.

우리만의 call signature를 선언할 수 있다.

type Add = (a: number, b: number) => number

const add:Add = (a, b) => a + b

a와 b가 number 타입이라고 지정하고 리턴도 number로 반환한다.

이렇게 하면 add 함수의 타입을 Add로 지정할 수 있고 따로 타입을 지정하지 않아도 된다.

Overloading

function overloading이나 method overloading이라고도 불린다.

많은 이름으로 불리지만 핵심은 overloading이다.

실제로 많은 오버로딩된 함수를 직접 작성하지는 않는다. 다른 사람이 만든 패키지나 라이브러리들은 오버로딩을 많이 사용한다. 그러므로 오버로딩이 무엇인지 알아야 한다.

오버로딩은 무엇일까?

오버로딩은 함수가 서로 다른 여러개의 call signatures를 가지고 있을 때 발생한다.

type Add = {
 (a: number, b: number): number
 (a: number, b: string): number
}

const add:Add = (a, b) => a + b

위의 Add 타입에는 모든 인자 a와 b가 number를 갖는 것과 b가 string인 것, 이렇게 두 가지 다른 call signatures를 가지고 있다.

그렇게 되면 아래의 add 함수는 에러가 발생한다. 두 가지 signatures 중 무엇을 선택할지 모르기 때문이다.

add 함수에 typeof를 사용하여 에러가 나지 않게 할 수 도 있다.

https://developer-talk.tistory.com/307

 

[TypeScript]함수 오버로딩(Function Overloading)이란?

함수 오버로딩이란? TypeScript에서는 같은 이름을 가진 함수를 여러 개 정의할 수 있으며 각 함수는 서로 다른 타입을 가지는 매개변수로 정의해야 합니다. 매개변수가 다르며 이름이 동일한 함수

developer-talk.tistory.com

여기서 오버로딩의 자세한 방법을 알 수 있다.