interface Bar {
a: string;
b: string;
}
function foo(obj: Bar, prefix?: string) {
if (prefix === undefined) {
return obj;
}
let rtn = {};
Object.getOwnPropertyNames(obj).forEach(ele => rtn[`${prefix}-${ele}`] = obj[ele]);
return rtn;
}
const bar: Bar = { a: 'avalue', b: 'bvalue' };
console.log(foo(bar));
console.log(foo(bar,'test'));
playground link:
http://www.typescriptlang.org/play/#src=interface Bar%20%7B%0D%0A%20%20a%3A string%3B%0D%0A%20%20b%3A string%3B%0D%0A%7D%0D%0A%0D%0Afunction foo(obj%3A Bar%2C prefix%3F%3A string)%20%7B%0D%0A%20%20%20%20if (prefix %3D%3D%3D undefined)%20%7B%0D%0A%20%20%20%20%20%20%20%20return obj%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20let rtn%20%3D%20%7B%7D%3B%0D%0A%20%20%20%20Object.getOwnPropertyNames(obj).forEach(ele %3D> rtn%5B%60%24%7Bprefix}-%24{ele%7D%60%5D%20%3D%20obj%5Bele%5D)%3B%0D%0A%20%20%20%20return rtn%3B%0D%0A%7D%0D%0A%0D%0Aconst bar%3A Bar %3D { a%3A 'avalue'%2C b%3A 'bvalue'%20%7D%3B%0D%0Aconsole.log(foo(bar))%3B%0D%0Aconsole.log(foo(bar%2C'test'))%3B