零个或所有可选但类型化的参数
Zero or all optional but typed parameters
我正要学习一些类型化的函数式编程,所以刚开始实现部分应用程序——它应该是类型安全的。
问题:我正在尝试创建一个函数,该函数接受一个函数并将其零个或所有参数作为参数。
所以我从那个界面开始
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 要求 all 参数,但我希望允许 zero up to all
有什么办法吗?
您可以定义类似于内置 Parameters
:
的 PartialParameters
实用程序
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)
我正要学习一些类型化的函数式编程,所以刚开始实现部分应用程序——它应该是类型安全的。
问题:我正在尝试创建一个函数,该函数接受一个函数并将其零个或所有参数作为参数。
所以我从那个界面开始
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 要求 all 参数,但我希望允许 zero up to all
有什么办法吗?
您可以定义类似于内置 Parameters
:
PartialParameters
实用程序
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)