小编Len*_*ahl的帖子

对象属性的类型安全映射

我想复制一个对象并以类型安全的方式映射其属性。我可以在 TypeScript 中描述结果类型,但无法在不进行强制转换的情况下实现属性映射。

因此,考虑我有一个可以这样描述的对象:

interface MyObject {
    a: number;
    b: string;
}
Run Code Online (Sandbox Code Playgroud)

我想映射它的所有属性。事实上,我可以正确地用 TypeScript 描述映射:

type MappedObject = {[K in keyof MyObject]: {meta: string; value: MyObject[K]}};
Run Code Online (Sandbox Code Playgroud)

我现在已经扩展了 的所有属性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 {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在我看来,结果Object.fromEntries(...)应该是兼容的,MappedObject但事实并非如此。理想情况下,我们如何才能实现这一目标,而不需要强制转换?

typescript

7
推荐指数
0
解决办法
207
查看次数

标签 统计

typescript ×1