[하루만에 정복해보는 TS] Call signature와 Overloading 그리고 최종보스 Generic
2023. 5. 31. 09:02ㆍTrip to TypeScript
사실 지금부터가 본격적인 내용이다. Call signature은 바로 아래와 같이 type을 알려주는 팝업 창이다.
참고로 void는 아무것도 return하지 않는다는 것이다. 실제로 함수에서 return이 사용되지 않은 모습이다. 이런 콜스택이 여러개 있을 때 Overloading 이라고 한다. 딱히 내용은 없지만 알고는 있어야한다.
type SuperPrint = {
(arr: number[]): void
(arr:boolean[]): void
(arr: string[]): void
}
const superPrint: SuperPrint = (arr) => {
arr.forEach(i => console.log(i))
}
superPrint([1, 2, 3, 4])
superPrint([true, false, true])
superPrint(["a", "b", "c"])
superPrint([1, 2, true, false])???
제네릭은 진짜 내가 이해를 못했던 부분이라 노마드코더의 예시와 논리를 가져왔다. 이것은 왜 제네릭이 필요한지에 대한 반례이다. 여러가지 타입을 사용하고 싶다면 우리는 type에 계속 type값을 추가 해야할까? 그렇게 한다면 무궁무진한 조합을 모두 Call signature에 작성해야할 것 같다. 그래서 제네릭이 필요하다. 결론적으로 제네릭은 Call signature에 어떤 타입을 넣어야할지 확실하지 않을 때 generic을 사용한다.
type SuperPrint = {
<TypePlaceholder>(arr: TypePlaceholder[]):void
}
const superPrint: SuperPrint = (arr) => {
arr.forEach(i => console.log(i))
}
superPrint([1, 2, 3, 4])
superPrint([true, false, true])
superPrint(["a", "b", "c"])
superPrint([1, 2, true, false])
위의 예시처럼 <>로 제네릭을 선언하고 어디에 제네릭을 써야할지 써준다. 예시는 배열의 값들이 제네릭이라는 것을 말해주고 있다. 그래서 결론적으로 아래 superPrint에 들어가는 매개변수 값들은 에러에서 벗어날 수 있다. <>안에 들어가는 이름은 아무거나 해줘도 되지만 관례상 T, V를 많이 쓴다고 한다.
'Trip to TypeScript' 카테고리의 다른 글
[하루만에 정복해보는 TS] TS와 Class (0) | 2023.06.29 |
---|---|
[하루만에 정복해보는 TS] type 설정해보기 (0) | 2023.06.18 |
[하루만에 정복해보는 TS] Implicit Type & Explict Type (0) | 2023.06.18 |