C++의 템플릿 함수와 동일. 로 입력된 타입에 따라 자동 추론
any나 unknown으로는 타입 안정성을 완전히 확보하기 어려움function func(value: any) {
return value;
}
let num = func(10); // any 타입
let str = func("string"); // any 타입
num.toUpperCase(); // 런타임 오류 발생 가능 (컴파일러가 감지 못함)
function func(value: unknown) {
return value;
}
let num = func(10);
let str = func("string");
num.toFixed(); // ❌ 오류
→ unknown은 안전하지만 사용 전 타입 좁히기 필요. 귀찮고 불편하다.
function func<T>(value: T): T {
return value;
}
let num = func(10); // number 타입
let str = func("string"); // string 타입
<T>: 타입 변수를 선언T는 함수 호출 시 결정됨 (여기선 number, string)function func<T>(value: T): T {
return value;
}
let arr = func<[number, number, number]>([1, 2, 3]);
T에 튜플 타입을 직접 지정함number[]로 추론하므로, 정밀한 타입 추론이 필요할 땐 직접 명시any는 너무 느슨하고, unknown은 너무 엄격함<T>와 같은 타입 변수 사용제네릭은 타입스크립트의 가장 강력한 기능 중 하나로,
안정성과 유연성을 동시에 만족시킬 수 있는 패턴이다.