초깃값이 있는 경우 초깃값의 타입이 최종 반환값 타입이 되므로 타입 매개변수 S를 선언했습니다. 매개변수 a와 콜백 함수의 반환값, 초깃값 iV, reduce의 반환값을 전부 S 타입으로 바꾸면 됩니다.
다음 타입스크립트 코드를 보세요.
lib.es5.d.ts
interface Array<T> {
(...)
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
(...)
}
오버로딩이 세 개로 되어 있습니다. 첫 번째와 두 번째 오버로딩은 myReduce의 첫 번째 오버로딩처럼 하나로 합칠 수 있습니다. 따라서 거의 동일하게 타이핑했다고 볼 수 있습니다.