【发布时间】:2020-08-27 07:45:56
【问题描述】:
我有很多具有已知类型的对象,我需要将这些对象转换为具有已知类型的其他对象,如下所示:
interface FruitesWithNoCase = {
brokenbanana: string;
brokenorange: string;
apple: number;
}
interface FruitesWithCorrectCase = {
brokenBanana: string;
brokenOrange: string;
}
const inputObject: FruitesWithNoCase = { // My input data
brokenbanana: 'foo',
brokenorange: 'bar',
apple: 123
}
const outputObject: FruitesWithCorrectCase = { // Desired result
brokenBanana: 'foo',
brokenOrange: 'bar'
}
我不想手动映射每个对象,如果有一些函数可以接受 X 类型的输入对象和属性数组并返回和输出 Y 类型的对象,那就太好了,例如:
const outputObject = getAttributes<FruitesWithNoCase, FruitesWithCorrectCase, (keyof FruitesWithCorrectCase)[]>(inputObject, ['brokenBanana', 'brokenOrange']);
- 我总是有输入和输出类型
- 我总是有我需要在 camelCase 中选择的属性列表
- 我总是确定
output[prop.toLowerCase()]存在于input
没有类型的工作代码如下所示:
const inputObject = {
"brokenbanana": 'foo',
"brokenorange": 'bar',
"apple": 123
}
const anotherInputObject = {
"randomcar": "Fiat",
"randomtruck": "Ford"
}
function getAttributes(obj, keys) {
return keys.reduce((acc, key) => {
acc[key] = obj[key.toLowerCase()]
return acc;
}, {});
}
const outputObject = getAttributes(inputObject, ['brokenBanana', 'brokenOrange']);
const anotherOutputObject = getAttributes(anotherInputObject, ['randomCar'])
console.log(outputObject); // { brokenBanana: 'foo', brokenOrange: 'bar' }
console.log(anotherOutputObject); // { randomCar: 'Fiat' }
请帮助使这个函数类型安全。谢谢。
【问题讨论】:
标签: typescript typescript-generics