Unnrap/保留Typescript中功能的通用约束
假设我具有以下通用功能。
declare function greet<
Name extends "Alice" | "Bob",
Rest extends (Name extends "Alice" ? [isMother: boolean] : [isFather: boolean])
>(
name: Name,
...rest: Rest
): void;
此功能的第二个参数(或至少其标签)根据提供的name
而更改。我想在保留通用行为的同时映射此功能的参数。
例如,我想使用HOF产生一个新功能 - engry> engry
- - 除了参数类型用somewrapper
包装。
declare function mapParams<
I extends (...args: any[]) => any,
P extends Parameters<I>
>(fn: I): (...args: {[K in keyof P]: SomeWrapper<P[K]>}) => ReturnType<I>;
...将使用如下:
const greet = mapParams(greet);
greet(new SomeWrapper("Alice"), true);
同时,我想保留通用行为。这可能吗?
Let's say I have the following generic function.
declare function greet<
Name extends "Alice" | "Bob",
Rest extends (Name extends "Alice" ? [isMother: boolean] : [isFather: boolean])
>(
name: Name,
...rest: Rest
): void;
The second parameter of this function (or at least its label) changes depending on the supplied name
. I'd like to map the parameters of this function while preserving the generic behavior.
For instance, I'd like to use a HOF to produce a new function––identical to greet
––except that the parameter types are wrapped with SomeWrapper
.
declare function mapParams<
I extends (...args: any[]) => any,
P extends Parameters<I>
>(fn: I): (...args: {[K in keyof P]: SomeWrapper<P[K]>}) => ReturnType<I>;
... which would be used as follows:
const greet = mapParams(greet);
greet(new SomeWrapper("Alice"), true);
Meanwhile, I'd like to preserve the generic behavior. Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论