我最近从Flow转到Typescript,并且在转换某些代码库时遇到了一些错误,大多数错误已记录在案,或由Utility-Types软件包替代,但是我找不到能帮助我解决问题的文档或答案。下面的代码。
const toObject = (keys: { reduce: (arg0: (object: any, key: any) => any, arg1: {}) => void }) =>
keys.reduce((object: any, key: string | number) => {
const o = object;
o[key] = undefined;
return object;
}, {});
export type Pick<
Origin extends Record<string, any>,
Keys extends ReadonlyArray<keyof Origin>
> = $ObjMapi<ReturnType<typeof toObject, Keys>, <Key>(k: Key) => $ElementType<Origin, Key>>;
export type TypeOrVoid = <T>(arg0: T) => T | void;
export type Diffable<O extends {}> = $ObjMap<O, TypeOrVoid>;
更具体地说,Generic type 'ReturnType' requires 1 type argument(s).ts(2314)
上的ReturnType<typeof toObject, Keys>
错误
如何在保留相同功能的情况下减少到1个类型的参数?似乎没有替代$Call
流的方法。
答案 0 :(得分:0)
ReturnType<T>
只接受一个类型参数,即函数类型。在您的情况下,函数类型为typeof toObject
。整个TypeScript表达式将为ReturnType<typeof toObject>
,并将解析为any
,因为您将返回reduce
的结果,该结果在代码中键入为any
。