Inflearn brand logo image

인프런 커뮤니티 질문&답변

비오님의 프로필 이미지
비오

작성한 질문수

함수형 프로그래밍과 JavaScript ES6+

range와 느긋한 L.range

이거 reduce 타입스크립트로 어덯게 작성하나요?

작성

·

319

0

후.. generic이랑, overload 써서 해보려고 하는데 잘안되네요.
 
아래처럼 arrow function으로 하려니까, reduce 함수에서 타입을 지정해달라고 하는데, 이건 아닌거 같고..
type ReduceCallback<T> = (acc: T, cur: T)=>T
type Reduce<T> = {
(fn: ReduceCallback<T>, acc: T, iter: Iterable<T>) : T,
(fn: ReduceCallback<T>, iter: Iterable<T>) : T
}
const reduce: Reduce<T> = (fn, acc, iter) => {
if(iter === undefined) {
iter = acc[Symbol.iterator]();
acc = iter.next();
}

for(const a of iter) {
acc = fn(acc, a);
}
}

 

아래 처럼 function 스타일로 overload 하려고 하는데, acc[Symbo.iterator](); 여기서 에러가 나고요.

 

function reduce<T>(fn: ReduceCallback<T>, iter: Iterable<T>): T;
function reduce<T>(fn: ReduceCallback<T>, acc: T, iter: Iterable<T>):T{
if(!iter) {
iter = acc[Symbol.iterator]();
acc = iter.next();
}

for(const a of iter) {
acc = fn(acc, a);
}
return acc;
}

추가적으로 fn: ReduceCallback<T>, acc: T | Iterable<T>, iter? : Iterable<T> overload 맨 아래 작성해봐도 안되는데 이거 어떻게 하나요?????????

답변 1

0

MDU 유인동님의 프로필 이미지
MDU 유인동
지식공유자

제 강의 새소식 내용을 참고해주세요 :)

요약: https://github.com/marpple/fxts

비오님의 프로필 이미지
비오

작성한 질문수

질문하기