定义类型以将键入对象的数组转换为typescript中的索引对象
我想将定义类型以将键入对象的数组转换为typescript中的索引对象,typescript,typescript-typings,Typescript,Typescript Typings,我想将{key:'A',value:'B'}数组转换为索引对象{A:{key:'A',value:'B'}。如何定义返回类型以反映结果对象 function toObject<T = any>(a: Iterable<T & { key }>): { [k in /* !!not like this!! */ keyof T]: T } { return [...a].reduce((a, v) => (a[v.key] = v, a), {}) as
{key:'A',value:'B'}
数组转换为索引对象{A:{key:'A',value:'B'}
。如何定义返回类型以反映结果对象
function toObject<T = any>(a: Iterable<T & { key }>): { [k in /* !!not like this!! */ keyof T]: T } {
return [...a].reduce((a, v) => (a[v.key] = v, a), {}) as any;
}
// Hope there is a hint for A and B
toObject([{key:'A',value:'B'},{key:'B'}]).A
函数toObject(a:Iterable):{[k in/*!!不是这样的!!*/keyof T]:T}{
返回[…a].reduce((a,v)=>(a[v.key]=v,a),{})如有;
}
//希望对a和B有个提示
toObject([{key:'A',value:'B'},{key:'B'}]).A
编辑
感谢@Niilo Keinänen,答案非常接近,我将param改为array,同样有效
const toObject = <K extends string, T = any>(arr: Array<T & { value: K }>): { [k in K]: T } {
const obj: any = { };
arr.forEach(v => obj[v.value] = v);
return obj;
}
constToObject=(arr:Array):{[k in k]:T}{
const obj:any={};
arr.forEach(v=>obj[v.value]=v);
返回obj;
}
我是否正确理解:
toObject({ key: 'first', value: 'second' })
= { first: 'second' } ?
这似乎是可行的:
const toObject = <K extends string, V, T extends { [P in K]: V }>(keyValuePair: { key: K, value: V }): T => {
const obj: any = {}
obj[keyValuePair.key] = keyValuePair.value
return obj as T
}
constToObject=(keyValuePair:{key:K,value:V}):T=>{
const obj:any={}
obj[keyValuePair.key]=keyValuePair.value
返回obj作为T
}
也许你也可以以某种方式避免脏的任何类型,不确定。所有键值对是否都具有相同类型的“值”(示例中为字符串)?@NiiloKeinänen值字段不重要,
toObject([{key:'first',value:'second'}])={first:{key:'first',value:'second'}