gpt4 book ai didi

typescript - 如何在 Typescript 中保留映射对象的类型

转载 作者:行者123 更新时间:2023-12-04 02:00:45 24 4
gpt4 key购买 nike

如果我有一个字典对象,例如:

const x = {
foo: {inner: 3},
bar: {inner: 'hi'},
};

存在不同类型(例如字符串和数字)的内部属性。

然后我想将其映射到如下结构:

const y = {
foo: 3,
bar: 'hi',
};

但是我希望能够在不丢失任何类型信息的情况下自动执行此操作。这在 Typescript 中可能吗?

我可以使用 lodash几乎到达那里:

import { mapValues } from 'lodash';
const y: Y = mapValues(x, (z) => z.inner);

然而,这最终采用了字典中所有类型的联合,并带有类型签名:

const y: {
foo: string | number;
bar: string | number;
}

而不是想要的:

const y: {
foo: number;
bar: string;
};

最佳答案

像这样的东西应该可以工作:

type Wrapped<T> = {[K in keyof T]: {inner: T[K]}};

function unwrap<T>(x: Wrapped<T>): T {
// (the implementation here is not the point)
return _.mapValues(x as any, z => z.inner) as T;
}

const y = unwrap(x);

引用:https://www.typescriptlang.org/docs/handbook/advanced-types.html (最后一段)

关于typescript - 如何在 Typescript 中保留映射对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47444735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com