add0의 bind는 인수가 한 개이므로 CallableFunction의 첫 번째 bind 선언에 해당합니다. 타입은 다음과 같습니다.
lib.es5.d.ts
interface CallableFunction extends Function {
(...)
bind<T>(this: T, thisArg: ThisParameterType<T>): OmitThisParameter<T>;
(...)
}
먼저 this인 T는 (a?: number, b?: number, c?: number, d?: number, e?: number) => number 꼴의 함수입니다. 분석을 이어가기 위해서는 ThisParameterType과 OmitThisParameter 타입이 무엇인지 알아보아야 합니다. 둘 다 lib.es5.d.ts에 선언되어 있습니다.
lib.es5.d.ts
type ThisParameterType<T> = T extends (this: infer U, ...args: never) => any ? U : unknown;
type OmitThisParameter<T> = unknown extends ThisParameterType<T> ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T;