2017-12-25 3 views
0

기능적으로 n 번 인수를 인수로 반복하는 typescript 함수를 코딩하려고합니다. 재귀는 나에게 좋은 제안으로 보인다.typescript에 일반 화살표 기능을 추가 하시겠습니까?

바닐라 ES에서 시도한 내용은 다음과 같습니다.

const repeat = f => times => arg => { 
    if(times <= 0) { 
    return arg; 
    } else { 
    const val = repeat(f)(times-1)(f(arg)) 
    return val; 
    } 
} 

형식을 고집하는 최선의 시도는 컴파일을 통과하지 못합니다.

const repeat = <T>(f: T=>T) => (times: number) => (arg: T) => { 
    if(times <= 0) { 
    return arg; 
    } else { 
    const val: T = repeat(f)(times-1)(f(arg)) 
    return val; 
    } 
} 

편집 @arpl의 조언을 따라하지만, 별도의 인터페이스를 작성하지, 나는 아래에 대한 정착했다. "ret"에 대한 별도의 정의는 반환 유형을 적절히 추론 할 수있게하는 것입니다.

const repeat = <T>(f: (a: T)=>T) => (t: number) => (a: T) => { 
    const ret: T = t > 0 ? repeat(f)(t - 1)(f(a)) : a; 
    return ret; 
}; 

답변

2

다음은 인터페이스를 사용하는 한 가지 방법입니다.

interface Repeat { 
    <T>(f: (a: T) => T): (t: number) => (a: T) => T; 
} 

const repeat: Repeat = f => t => a => { 
    return t > 0 ? repeat(f)(t - 1)(f(a)) : a; 
}; 
관련 문제