function identity(arg: number): number {
return arg;
}
제네릭이 없다면, identity 함수에 특정 타입을 부여해야 함
그런데 arg가 number가 아닐 수도 있다면..?
any를 쓰기에는 받기 싫은 타입이 있을 수도 있으니까!
그럴 때 쓰는게 제네릭!
function identity<T>(arg: T): T {
return arg;
}
그러면 위와 같이 써봐주자! (T라는 타입 변수를 추가!)
T는 유저가 준 인수의 타입을 캡쳐하고 (number, string, ...) 이 정보를 나중에 사용하기 위해 가지고 있음
이렇게 정의해주고, 함수를 호출하려면 다음과 같이 해줄 수 있다.
이렇게 T에 전달해줄 타입을 직접 명시해줄 수도 있고,
직접 명시를 안해주어도 (일반적으로) 컴파일러가 T의 값을 자동으로 추론할 수 있도록 하기도 한다!
** 하지만 복잡한 코드에서는 컴파일러가 타입을 추론하지 못하는 경우도 왕왕 발생한다고 하니 주의! 그럴 때는 명시적으로 타입 전달을 해주자!
function multipleGeneric<T, U>(a: T, b: U): [T, U] {
return [a, b];
}
위와 같이 쓰는 것 가능!