给出如下对象:
const foo = {
a: {id: 1},
b: {id: 1},
c: {id: 1},
d: {id: 1},
....
}
以及将对象转换为:
的函数const bar = {
a: 1,
b: 1,
c: 1,
d: 1,
....
}
如:
function<MyInputInterface>(map: MyInputInterface): MyOutputInterface? {
const newMap = {};
_.forIn(map, (val, key) => {
newMap[key] = val.id;
}
return newMap;
}
有没有办法在Typescript中只定义一个自动承担另一个(输入或输出)结构的接口?
例如。将MyInputInterface
传递给函数将返回MyOutputInterface
?
一般来说,由于某些库提取元信息并仅返回某些值(例如id),我所描述的模式在我的代码库中的许多地方都可以找到。我当然可以将输入/输出定义为接口来获取更多的类型信息,但我有兴趣看看是否有一个解决方案,只需要定义输入或输出,并免费获得其他类型信息。
由于这个例子可能不够清楚,这里有一个更好的例子:
const properties = {
propA: {
desc: 'property a',
val: 1
},
propB: {
desc: 'property b',
val: 'hello'
}
// any arbitrary number of properties
};
需要转换为:
const parsedProperties = {
propA: 1,
probB: 'hello'
};
答案 0 :(得分:0)
你可以试试这个:
private foo:Foo= {
propA: {
desc: 'property a',
val: 1
},
propB: {
desc: 'property b',
val: 'hello'
}
};
converter(foo:Foo , probName ):Bar{
let bar:Bar={};
for(let a in foo){
bar[a] = foo[a][probName];
}
return bar;
}
}
interface Foo{
[propA: string]:{[propB:string]:string|number};
}
interface Bar{
[name: string]:string|number ;
}
console.log('bar' , this.converter(this.foo , 'val' ));