Javascript 根据TypeScript中函数的行为自动生成/获取简单类型
给定一个对象,例如:Javascript 根据TypeScript中函数的行为自动生成/获取简单类型,javascript,typescript,types,definitelytyped,Javascript,Typescript,Types,Definitelytyped,给定一个对象,例如: 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): MyOutputInterfa
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;
}
需要转换为:
const parsedProperties = {
propA: 1,
probB: 'hello'
};
您可以尝试以下方法:
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' ));
嗨,法蒂姆,谢谢你。不幸的是,这并不像我希望的那样通用。我的示例只是简单的最小值,实际环境看起来非常不同(更多的键/值对)。此外,我传入转换器的每个元素可能不同(它们具有不同的结构)。我想从Foo到Bar不用申报两个interfaces@Frame91我更新了答案,我知道它没有你想要的那么一般,但希望这会有所帮助。我认为至少函数应该知道你想要的
probName
。对不起,这仍然不是我想要的,因为它仍然需要我编写两个接口。我在看哪一个可以满足我的需要
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' ));