Как мне полностью набрать эту факториальную функцию? - PullRequest
0 голосов
/ 22 октября 2018

const fact: (n: number) => number = ((f: any) => f(f))((g: any) => (n : number) => n > 0 ? n * g(g)(n - 1) : 1);

Я начал играть с Typescript вчера, и мои мысли просто ломаются.n, очевидно, число, но как насчет f и g?

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете объявить вызываемый интерфейс, который принимает себя в качестве аргумента и возвращает результат:

interface Rec<T> {
    (p: Rec<T>): T
}

const fact: (n: number) => number = ((f: Rec<(n: number)=> number>) => f(f))((g) => (n : number) => n > 0 ? n * g(g)(n - 1) : 1);

Примечание Компилятор выведет тип g как Rec<(n: number)=> number>

Или менее общий и позволяющий компилятору выводить все, что он может версии:

interface Rec {
    (p: Rec): (n: number)=> number
}

const fact = ((f: Rec) => f(f))((g) => (n) => n > 0 ? n * g(g)(n - 1) : 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...