使用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推断类型通常定义为累加器的起始值。当我有一个返回reduced值的函数时,我通常会这样做:

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>
);
}

相关内容

  • 没有找到相关文章

最新更新