TypeScript не может вывести общие c параметры функции высшего порядка в зависимости от ее содержимого - PullRequest
0 голосов
/ 27 мая 2020

Рассмотрим следующий код:

let HOF1 = <Args, Ret>(f: (args: Args) => Ret) => {
    return (args: Args): Ret => {
        return f(args)
    }
}

let HOF2 = <Args, Ret>(f: (args: Args) => Ret) => {
    return <Result>(args: Args & { container: (args: Ret) => Result }) => {
        return args.container(f(args))
    }
}

let HOF3 = <Args, Ret>(f: (args: Args) => Ret) => {
    return 1
}

let take = <T>(args: { items: T[], n: number }) => args.items.slice(0, args.n)
let wrappedFn1 = HOF1(take)
let wrappedFn2 = HOF2(take)
let wrappedFn3 = HOF3(take)

Все функции высшего порядка HOF1, HOF2 и HOF3 имеют одинаковую сигнатуру, и они вызываются с одним и тем же аргументом ( принимает function), но TypeScript (версия 3.8.3) может понимать только первый вызов. Последние две строки вызывают опечатку. Что могло быть не так?

...