typescript - 元素在转换中隐式具有任何类型
问题描述
我不知道如何正确键入此函数:
function makeTransform<TObj extends Record<string,any>, K extends keyof TObj>(transformer: Record<K, (x:TObj[K])=>any>): (o:TObj)=>any {
return (obj: TObj) => {
const out: any = {...obj}
for (const k of Object.keys(transformer)) {
out[k] = transformer[k](obj[k])
}
return out;
}
}
用法:
const trans = makeTransform({a:x => x*2});
const arr = [{a:1,b:2},{a:3,b:4}];
console.log(arr.map(trans)) // [ { a: 2, b: 2 }, { a: 6, b: 4 } ]
错误:
我知道它正在接收,string
但Record<string,any>
我不确定我还能放什么?它应该只有字符串键,但transformer
应该有来自TObj
.
解决方案
归功于用户k48(答案:https ://stackoverflow.com/a/55721107/5536304 )
以下解决方案编译:
function makeTransform<TObj extends Record<string, any>, K extends keyof TObj>(transformer: Record<K, (x: TObj[K]) => any>): (o: TObj) => any {
return (obj: TObj) => {
const out: any = { ...obj }
for (const k in transformer) {
out[k] = transformer[k](obj[k]);
}
return out;
}
}
const trans = makeTransform({ a: x => x * 2 });
const arr = [{a:1,b:2},{a:3,b:4}];
console.log(arr.map(trans)) // [ { a: 2, b: 2 }, { a: 6, b: 4 } ]
推荐阅读
- python - 通过 pickle 转储进行预测 - ValueError:无法将字符串转换为浮点数:
- c# - 不同 GroupBox 内的多个 ChechBox
- r - 如何在 R 中使用 Workflow 和 Caret 包进行并行计算
- c - ESP-IDF 框架中的链接器错误(未定义引用)
- flutter - ParentDataWidget Flexible(flex: 1) 想要将 FlexParentData 类型的 ParentData 应用于 RenderObject
- kivy - 声明后无效数据 Kivy 教程#5 - 对象属性和.kv 续
- c# - c# 按下键时显示其他字符(字母)
- python - Pygame 填充小径覆盖的区域
- xamarin - Xamarin 清除网格中的许多项目
- database - Room 无法在 Android Studio 中构建数据库我不知道出了什么问题?