对象属性的类型安全映射

时间:2020-09-25 13:16:29

标签: typescript

我想复制对象并以类型安全的方式映射其属性。我可以在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兼容,但事实并非如此。我们如何才能做到这一点,理想情况下无需铸造?

0 个答案:

没有答案