Typescript对象类型转换为数组类型

5
什么是将对象类型转换为包含一个键的对象数组的正确方法?
例如我想要将以下内容转换:
type MyObjectType = {
    foo: number,
    bar: string
}

进入

type MyObjectArrayType = { key: 'foo', value: number| { key: 'bar', value: string}

为了让我可以做到这一点
const objects: MyObjectArrayType[] = [{key: 'foo', value: 2}, {key: 'bar', value: 'baz'}]

我在考虑类似这样的事情

type MyObjectArrayType<K extends keyof MyObjectType> = { value: MyObjectType[K], key: K }

但我无法让它按照我想要的方式工作。

1个回答

3
您可以使用映射类型来生成联合类型的每个成员(对于每个属性),然后使用索引类型来获取映射类型中的所有值类型。
type MyObjectType = {
    foo: number,
    bar: string
}

type PropUnion<T> = {
  [K in keyof T]: { value: T[K], key: K }
}[keyof T]

type MyObjectArrayType = PropUnion<MyObjectType>;
const objects: MyObjectArrayType[] = [{key: 'foo', value: 2}, {key: 'bar', value: 'baz'}]

游乐场链接


如果对象的成员都是相同类型,那会很简单吗? - cassepipe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接