我想以类型安全的方式复制一个对象并映射其属性。我可以在 TypeScript 中描述生成的类型,但如果不进行强制转换,我无法实现属性映射。
所以,考虑我有一个可以这样描述的对象:
interface MyObject {
a: number;
b: string;
}
我想映射它的所有属性。事实上,我可以正确地用 TypeScript 描述映射:
type MappedObject = {[K in keyof MyObject]: {meta: string; value: MyObject[K]}};
我现在扩展了MyObject. 美好的。现在,问题是,我不能以类型安全的方式应用该转换:
const object: MyObject = {
a: 42,
b: 'foo',
};
const mapped = Object.fromEntries(
Object.entries(object).map(([k, v]) => [k, {meta: 'bar', value: v}]),
);
doSomethingWithMappedObject(mapped); // error
function doSomethingWithMappedObject(mapped: MappedObject): void {
// ...
}
在我看来,结果Object.fromEntries(...)应该是兼容的,MappedObject但事实并非如此。我们怎样才能做到这一点,理想情况下没有铸造?