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

时间:2020-06-16 09:46:05

标签: typescript typescript-typings

将对象类型转换为对象数组(每个对象包含对象的一个​​键)的正确方法是什么?

例如,我要转换

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 个答案:

答案 0 :(得分:2)

您可以使用映射类型生成联合的每个成员(针对每个属性),并使用索引类型获取映射类型中的所有值类型。

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'}]

Playground Link