제네릭이란 타입을 마치 함수의 파라미터처럼 사용하는 것을 의미한다.
function getText<T>(text: T): T {
return text;
}
getText<string>('hi');
getText<number>(10);
getText<boolean>(true);
function logText(text: string): string {
return text;
}
function logText<T>(text: T): T {
return text;
}
// #1
const text = logText<string>("Hello Generic");
// #2
const text = logText("Hello Generic");
먼저 함수의 이름 바로 뒤에 (T)라는 코드를 추가하고 함수의 인자와 반환값에 모두 T라는 타입을추가한다. 이렇게 되면 함수를 호출할 때 넘긴 타입에 대해 타입스크립트가 추정할 수 있게 된다. 따라서 함수의 입력 값에 대한 타입과 출력 값에 대한 타입이 동일한지 검증할 수 있게 된다.
function logText<T>(text: T): T {
console.log(text.length); // Error: T doesn't have .length
return text;
}
function logText<T>(text: T[]): T[] {
console.log(text.length); // 제네릭 타입이 배열이기 때문에 `length`를 허용합니다.
return text;
}