제네릭: 타입을 파라미터로 받아서 다양한 타입에 대해 작동할 수 있는 컴포너트(클래스, 인터페이스, 함수)를 정의할 수 있는 기능
function identity<t>(arg: T): T {
return arg;
}
// 호출 1
let output = identity<string>("myString");
// 호출 2
// 타입 추론을 통해 "myString"을 보고 스트링을 T로 추론함.
let output = identity("myString");
제네릭은 타입을 캡처한다. 즉, 제네릭 = 타입 변수
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: <T>(arg: T) => T = identity;
// T가 아니라 다른 매개변수 이름 사용 가능(예를 들어 U)
let myIdentity: <U>(arg: U) => U = identity;
interface GenericIdentityFn {
<T>(arg: T): T;
}
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: GenericIdentityFn = identity;
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };