我有一个函数,它接收一个对象并返回一个具有相同属性名的方法的对象:
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>
);
}