제네릭을 사용하면 사용하는 타입을 명시적으로 정의할 필요가 없는 클래스, 함수 및 type Aliases(타입 별칭)을 만드는 데 사용할 수 있는 '타입 변수'를 만들 수 있다.
Generics를 사용하면 재사용 가능한 코드를 더 쉽게 작성할 수 있다.
함수가 있는 제네릭은 사용 및 반환된 형식을 보다 정확하게 나타내는 보다 일반화된 메서드를 만드는 데 도움이 된다.
TS는 또한 함수 매개변수에서 일반 매개변수의 타입을 유추할 수 있다.
제네릭은 Map과 같은 일반화된 클래스를 만드는 데 사용할 수 있다.
TS는 생성자 매개변수에서 사용되는 경우 일반 매개변수의 타입을 유추할 수도 있다.
타입 별칭의 제네릭을 사용하면 더 재사용 가능한 타입을 만들 수 있다.
이것은 다음과 같은 구문예시를 사용하는 인터페이스에서도 작동한다.
interface Wrapped<T> {
제네릭에는 다른 값이 지정되거나 유추되지 않은 경우 적용되는 기본값이 할당될 수 있다.
class NamedValue<T = string> {
private _value: T | undefined;
constructor(private name: string) {}
public setValue(value: T) {
this._value = value;
}
public getValue(): T | undefined {
return this._value;
}
public toString(): string {
return `${this.name}: ${this._value}`;
}
}
let value = new NamedValue('myNumber');
value.setValue('myValue');
console.log(value.toString()); // myNumber: myValue
제네릭에 제약 조건을 추가하여 허용되는 것을 제한할 수 있다. 제약 조건을 사용하면 제네릭 형식을 사용할 때 보다 구체적인 형식에 의존할 수 있다.
default value(기본값)와 결합될 수 있다.