javascript - 使用 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>
);
}
推荐阅读
- css - SCSS - 在元素后添加过渡
- c++ - Ncurses - “移动”及其衍生词删除屏幕内容
- google-maps-api-3 - 使用here map API获取位置图片?
- java - 如何在运行方法之外发送对象?
- javascript - 在搜索建议单击内容转到 codeigniter 中的文本区域
- ios - 为什么我的 ViewController 在一次调用 present(_:animated:completion:) 方法后连续两次模态显示?
- java - 尽管没有出现错误,但 Java SQL 更新语句未在表中更新
- assembly - 这是英特尔流水线指令吗?
- jquery-isotope - 可以将标签从 DOM 移到另一个库吗?
- php - 我不能在数组中输入一个值?