-
TypeScript의 함수 2 (Overloading)개발언어/TypeScript 2022. 6. 12. 16:21
Overloading
function overloading / method overloading
실제로 오버로딩된 함수를 직접 작성하지는 않을것이다. 그 대신 대부분 다른 사람이 만든 외부 라이브러리를 사용할 텐데, 이런 패키지나 라이브러리 들은 오버로딩을 엄청 많이 사용한다. 그래서 오버로딩에대해 제대로 알아 두는 것은 중요하다.
좀 더 긴 방식의 call signature 작성 방법
위 와 같은 방법이 존재하는 이유은 오버로딩 때문이다.
Overoloading은 무엇일까? =>
오버로딩은 함수가 여러개의 call signatures를 가지고 있을 때 발생한다. 그냥 여러 개 가 아니라 서로 다른 여러개의 call signature을 가졌을 때 발생하는 것이다.
위 코드의 Add라는 함수는 첫번째 모양으로 부를 수도 있고, 두번째 모양으로 부를 수도 있다. 그렇다면 아래에서 Add call signature를 가지는 함수를 부를 때, a는 항상 number type을 가지지만 b는 number | stirng type을 가지게 되므로, a + b를 더 하 수는 없다.
다시 말하면, 오버로딩은 여러 call signatures가 있는 함수이다.
대체로 우리가 사용하는 일부 라이브러리에는 몇가지 함수가 있다. 그리고 그 함수는 stirng을 보낼 수 있거나 configuration객체 같은 객체를 보낼 수 있게 허용했을 것이다.
Router.push({ path : "/home", state : 1 }) .push("/home")
위 와 같은 코드는 next.js에서 실제로 사용하는 예시이다. path를 stirng으로도 보낼 수 있고, object로도 보 낼 수있다.
사용방법
패키지나 라이브러리를 디자인할 때 많은 사람들이 사용하는 방식이고, 오버로딩은 실제로 이런식으로 쓰여진다.
핵심은 string이나 Config type을 인자로 받았다면 혹은 받을 수 있다면, ts내부에서 그 타입을 체크하도록 해준다.
overloading이 여러가지 다른 argument를 가지고 있을 때 발생하는 효과 =>
지금까지 봐온 예시는 call signature마다 하나의 인자를 가졌지만, 실제로는 같은 type의 함수 call signature인데 어떤 call signature는 2개의 인자를 어떤 call signature는 6개의 인자를 가질 수도 있다.
error가 발생하는 이유는 Add의 속한 각각의 call signature가 서로 다른 개수의 인자를 가지기 때문이다. 다른 개수의 인자를 가지면 나머지 파라미터도 타입을 지정해주어야 한다. 자세히 설명하자면 Add 함수의 두번째 call signature 인자 c:number는 Optional 같은 경우 이다.
그래서 실제 Add type의 함수를 정의 할 때는 c는 number type일 수도 있다는 것(optional)을 명시해주어야 한다.
이런 경우는 call signature의 인자의 개수가 다를 때 일어나는 경우이다.
[출처 - https://nomadcoders.co/typescript-for-beginners/lectures/3674]
'개발언어 > TypeScript' 카테고리의 다른 글
TypeScripte- typeScript를 javaScript로 compile (0) 2022.11.05 TypeScript의 함수 4 (Conclusions) (0) 2022.06.13 TypeScript의 함수 3 (Polymorphism) (0) 2022.06.12 TypeScript의 함수 1(Call Signatures) (0) 2022.06.12 Type of TS part Three (0) 2022.06.12