javascript - 在循环中调用时函数返回类型未正确解析

标签 javascript node.js typescript

我创建了一个简单的映射,其中包含两个函数,这两个函数采用单个“foo: string”参数并实现直接返回的各种函数:

import { mapValues } from 'lodash';

const fun1 = (foo: string) => (name: string, surname: string) => {};
const fun2 = (foo: string) => (age: number) => {};

interface Actions {
  fun1: typeof fun1;
  fun2: typeof fun2;
}

const actions: Actions = { fun1, fun2 };

const mappedActions = mapValues(actions, action => action('bar'));

mappedActions.fun1(1);

使用 mapValues,我循环访问这些函数并使用一些公共(public)参数调用它们。我期望的是在 mappedActions 映射中分配的半调用 函数的映射,但类型仍然存在问题。

fun1 没有解析为接受 (name: string, surname: string) 参数的函数,但仍然是顶级函数。

我应该如何编写以使 TypeScript 正确解析类型?

enter image description here

最佳答案

我将您的代码片段复制到 CodeSandbox 并分析了 Lodash 的函数 mapValues(),我认为 mapValues() 的类型不符合您的目的。

mapValues<T extends object, TResult>(obj: T | null | undefined, callback: ObjectIterator<T, TResult>): { [P in keyof T]: TResult };

如您所见,函数 mapValues 接受一个对象(T extends object),并为该对象的每个键分配 TResult,这使得:

mapValues<Actions, ((name: string, surname: string) => void) | ((age: number) => void)>(obj: Actions, callback: ObjectIterator<Actions, ((name: string, surname: string) => void) | ((age: number) => void)>): {

我尝试将 lodash(尤其是 lodash/fp)与 TypeScript 一起使用,我可以说并非一切都完美,而且很难为所有可能性创建通用类型.

关于javascript - 在循环中调用时函数返回类型未正确解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55881861/

相关文章:

javascript - ElectronJS。设置窗口名称或确定哪个窗口发出事件

node.js - Sequelize : "Cannot read property ' length' of undefined"

javascript - 将 Typescript Map<string, string> 转换为 json 字符串表示

javascript - 如何检查表列数据类型

javascript - 如何在 ReactJS 中使用 ref 触发动画

javascript - ionic 2 : Local notification icon

node.js - 无法在 npm 安装中读取 null 的属性 'startsWith'

node.js - 使用 Redis 和 Nodejs 创建 Restful API

javascript - 如何在 Angular 8 中动态更改下拉值?

javascript - 如何在不使用任何其他鼠标事件的情况下检测长按鼠标事件