타입스크립트는 제네릭에 직접 타입을 넣지 않아도 추론을 통해 타입을 알아낼 수 있습니다.
interface Person<N, A> {
type: 'human',
race: 'yellow',
name: N,
age: A,
}
const personFactoryE = <N, A = unknown>(name: N, age: A): Person<N, A> => ({
type: 'human',
race: 'yellow',
name,
age,
});
const zero = personFactoryE('zero', 28);
// const zero: Person<string, number>
변수 zero는 name 매개변수에 'zero'를, age 매개변수에 28을 인수로 넣었습니다. name: string, age: number이므로 N은 string이, A는 number가 됩니다. A에 기본값으로 unknown이 들어 있지만 number가 좀 더 구체적인(좁은) 타입이므로 unknown 대신 number로 추론합니다. 따라서 zero의 타입은 반환값 타입인 Person<string, number>입니다.