首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使自定义memoizeOne函数返回正确类型

如何使自定义memoizeOne函数返回正确类型
EN

Stack Overflow用户
提问于 2020-06-13 22:31:40
回答 1查看 53关注 0票数 0

我有一个函数来记忆一个对象:

代码语言:javascript
复制
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传递Generic?谢谢

下面是一个可运行的示例:https://codesandbox.io/s/memoizeobj-bq3r8?file=/src/index.ts

memoizeOne的声明

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2020-06-13 23:03:07

这比我想象的要简单得多,我试图将泛型类型添加到memoizeObj的const赋值中,但我所需要的是:

代码语言:javascript
复制
function identity<T>(x: T) {
  return x;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62361184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档