我创建了一个简单的映射,其中包含两个函数,这两个函数采用单个“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 正确解析类型?
最佳答案
我将您的代码片段复制到 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/