我有一个记忆对象功能:
import memoizeOne from 'memoize-one';
type ArrayWithOneObj = [Record<string, unknown>];
const compareObject = ([obj1]: ArrayWithOneObj, [obj2]: ArrayWithOneObj) =>
obj1 === obj2 ||
(Object.keys(obj1).length === Object.keys(obj2).length &&
Object.keys(obj1).every(key => obj2.hasOwnProperty(key) && obj1[key] === obj2[key]));
const identity = (x: Record<string, unknown>) => x;
const memoizeObj = memoizeOne(identity, compareObject);
// USING IT:
type FruityObj = {
name: string;
};
const apple1: FruityObj = { name: 'apple' };
const apple2: FruityObj = { name: 'apple' };
// This works but the type of the memoized variables should be FruityObj instead
// of Record<string, unknown>
const memoizedApple1 = memoizeObj(apple1);
const memoizedApple2 = memoizeObj(apple2);
console.log(memoizedApple1 === memoizedApple2);
如何修改以使MemoizeObj
返回传入的类型? 我不确定如何将泛型传递给memoizeobj
? 谢谢
下面是一个可运行的示例:https://codesandbox.io/s/memoizeobj-bq3r8?file=/src/index.ts
MemoizeOne
的声明:
export declare type EqualityFn = (newArgs: any[], lastArgs: any[]) => boolean;
export default function memoizeOne<ResultFn extends (this: any, ...newArgs: any[]) => ReturnType<ResultFn>>(resultFn: ResultFn, isEqual?: EqualityFn): ResultFn;
这比我想象的要简单得多,我试图将泛型类型添加到memoizeobj
的常量赋值中,但我所需要的只是:
function identity<T>(x: T) {
return x;
}