Рассмотрим следующий код:
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) может понимать только первый вызов. Последние две строки вызывают опечатку. Что могло быть не так?