typescript - 用 Typescript 中的映射函数替换函数的返回类型
问题描述
我想通过使用映射函数来替换函数的返回类型。它应该看起来像这样:
// typescript 2.9, so no tuple arguments support yet.
type WithNewReturnType<
F1 extends (...args: T[]) => V,
F2 extends (arg: V) => MV,
T,
V,
MV
> = ((...args: T[]) => MV);
// use case
const chain = <F1, F2>(f1: F1, f2: F2): WithNewReturnType<F1, F2> =>
(...args) => f2(f1(...args));
F1 的返回类型应该与 F2 的参数类型匹配。
上面的代码有两个问题:
- 它抱怨 F1 和 F2 未使用。
- 它需要 5 个参数而不是 2 个,例如 WithNewReturnType。
如何仅使用两个保持约束的参数来做到这一点R<F1> === A<F2>
?
解决方案
玩了之后,我自己想出了一个答案:
export type Chained<F1, F2> = F1 extends (
...args: Array<infer T>
) => infer V
? (F2 extends (arg: V) => infer MV ? ((...args: T[]) => MV) : never)
: never;
推荐阅读
- html - 有没有办法仅使用 css 或 html 使文本填充按钮大小?
- javascript - 通用打字稿组件继承组件道具
- php - 如何将生成的图像文件移动到 PHP 中的自定义目录?
- reactjs - 使用代码美化与呈现的内容 reactjs
- wpf - wpf使用列名检查datagrid单元格值
- apache-flink - 使用 Flink 中的键处理和聚合多个 json
- scatter-plot - 用新数据更新 pixi.js 散点图
- python - 使用python在chrome中删除特定于站点的cookie
- php - 通过soapclient发布请求
- javascript - 如何在 Javascript (Node.js) 中将 .jl 文件转换为 .json 文件