Typescript 对象类型到数组类型

Ore*_*lus 5 typescript typescript-typings

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

\n\n

比如我想改造

\n\n
type MyObjectType = {\n    foo: number,\n    bar: string\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

进入

\n\n
type MyObjectArrayType = { key: 'foo', value: number}\xc2\xa0| { key: 'bar', value: string}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样我就可以做

\n\n
const objects: MyObjectArrayType[] = [{key: 'foo', value: 2}, {key: 'bar', value: 'baz'}]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在想类似的事情

\n\n
type MyObjectArrayType<K extends keyof MyObjectType> = { value: MyObjectType[K], key: K }\n
Run Code Online (Sandbox Code Playgroud)\n\n

但无法让它像我想要的那样工作。

\n

Tit*_*mir 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'}]
Run Code Online (Sandbox Code Playgroud)

游乐场链接