Generic은 타입으로 매개변수화된 재사용 가능한 코드를 작성하게 해줍니다. 코드가 사용될 때 채워지는 "타입 변수"인 셈입니다. 타입 안전성을 잃지 않고 재사용을 제공합니다(대안인 any는 안전성을 잃습니다).
ts
(): { arr[]; }
first<T>(: T[]): T { arr[]; }
n = ([, , ]);
s = ([, ]);
Generic은 타입으로 매개변수화된 재사용 가능한 코드를 작성하게 해줍니다. 코드가 사용될 때 채워지는 "타입 변수"인 셈입니다. 타입 안전성을 잃지 않고 재사용을 제공합니다(대안인 any는 안전성을 잃습니다).
(): { arr[]; }
first<T>(: T[]): T { arr[]; }
n = ([, , ]);
s = ([, ]);
T는 자리표시자입니다. TypeScript는 인자로부터 그것을 **추론(infer)**하므로 반환 타입이 정확합니다. first([1,2])는 any가 아닌 number를 줍니다.
interface ApiResponse<T> { data: T; status: number; }
const res: ApiResponse<User> = await getUser(); // res.data는 User
class Box<T> {
constructor(private value: T) {}
get(): T { return this.value; }
}
const box = new Box(123); // Box<number>
function pair<K, V>(k: K, v: V): [K, V] { return [k, v]; }
pair("id", 42); // [string, number]
Generic은 TypeScript의 거의 모든 재사용 가능한 추상화를 떠받칩니다: Array<T>, Promise<T>, Map<K,V>, React의 useState<T>, 데이터 페칭 유틸리티, 컬렉션 등입니다.
하나의 구현이 여러 타입에 대해 동작하면서도 입력과 출력 타입 사이의 관계를 지우지 않고 전체 타입 정보를 끝까지 보존합니다.