typescript - 零个或所有可选但类型化的参数

标签 typescript functional-programming partial-application

我正要学习一些类型化的函数式编程,所以刚开始实现部分应用程序——它应该是类型安全的。

问题:我正在尝试创建一个函数,该函数将一个函数和零个或所有参数作为参数。

所以我从那个界面开始

interface Functor {
  (...args: any[]) => any
}

然后来到这个函数:

const partial = <T extends Functor>(fx: T, ...apply: Parameters<T>): Functor =>
  (...args: any[]) => fx(...apply, ...args);

这里的问题是,...args: Parameter<T>指示 typescript 要求所有参数,但我希望允许零到所有

有什么办法吗?

最佳答案

您可以定义类似于内置 ParametersPartialParameters 实用程序:

type PartialParameters<T> = T extends (...args: infer P) => any ? Partial<P> : never;

const partial = <T extends Functor>(fx: T, ...apply: PartialParameters<T>): Functor =>
(...args: any[]) => fx(...apply, ...args);

declare function foo(a: string, b: number): boolean;

partial(foo)

partial(foo, '1')

partial(foo, '1', 1)

Playground

关于typescript - 零个或所有可选但类型化的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65558624/

相关文章:

javascript - 在 API 调用 NgRx Angular 之前检查商店

algorithm - 红黑树包含过多的黑色节点和过少的红色节点

list - 如何获取我在 groovy 中迭代的列表的引用

F# 部分应用第二个参数

javascript - 如何创建具有某些数组值的对象而不保存对数组的引用?

typescript - "as const"在 TypeScript 中是什么意思,它的用例是什么?

javascript - 部分应用 - Eloquent Javascript

dictionary - 如何在 Common Lisp 中映射函数?

typescript - 如何使用 Typescript 处理 Vue 3 模板中的 DOM 对象

Haskell 网络服务器 : maintaining application state