- 선언 시점이 아닌 생성 시점에 타입을 명시하여 하나의 타입이 아닌 다양한 타입을 사용할 수 있도록 하는 기법이다.
- 한 번의 사용으로 다양한 타입에 재사용이 가능하다.
- T는 제네릭을 선언할 때 관용적으로 사용되는 식별자이다. (반드시 T를 사용하는 것은 아니다.)
function a<T>(arg: T): T {
return arg;
}
let x = a<string>("wangi");
console.log(x); // wangi 출력 타입은 string
let y = a("wangi");
console.log(y); // wangi 출력 타입은 string
let z = a(12);
console.log(z); // 12 출력 타입은 number
- class에서 generic 사용이 가능하다. 클래스 이름 뒤에 <> 사용
- 외부로부터 타입을 받아들여 클래스 내부에 입력된 타입을 적용시킬 수 있다.
class a<T> {
m: T;
n: (x: T, y: T) => T;
}
let b = new a<number>(); // 인스턴스 number 타입으로 사용
b.m= 1;
b.n= function(x, y) { return x + y; };
console.log(b.n(b.m, 5)); // 6
let c = new a<string>(); // 인스턴스 string 타입으로 사용
c.m= "21";
c.n= function(x, y) { return x + y; };
console.log(c.n(c.m, "test")); //21test