繁体   English   中英

使用 TypeScript 动态返回对象属性类型

[英]Dynamic return type of object properties using TypeScript

我有一个函数,它接收一个对象并返回一个具有相同属性名称的方法对象:

function someGenerator<P extends {}>(params: P) {
  return Object.keys(params).reduce((acc, key) => ({
    ...acc,
    [key]: () => {
      console.log(params[key]);
    },
  }), {});
}

基本上我想像这样使用它:

type Params = {
  str: string;
}

const params = {
  str: 'some text',
}

const someInstance = someGenerator<Params>(params);

someInstance.str();

我试图定义该函数的返回类型:

type ReturnType<P> = {
  [K in keyof P]: () => void;
}

但是这种类型并没有像我预期的那样工作,因为返回类型的定义没有像它应该的那样保存参数。

任何人都可以帮助定义返回类型吗?

.reduce推断类型通常被定义为累加器的起始值。 当我有一个返回reduce d 值的函数时,我通常会这样做:

function someGenerator<P extends Record<string, any>>(params: P) {
  return Object.keys(params).reduce(
    (acc, key) => ({
      ...acc,
      [key]: () => {
        console.log(params[key]);
      }
    }),
    {} as Record<keyof P, () => void>
  );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM