typescript 对象类型到数组类型

标签 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 }

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

最佳答案

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

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

关于 typescript 对象类型到数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62405615/

相关文章:

typescript - TypeScript 中的代数数据类型

typescript - `MyInterfaceOne[] | MyInterfaceTwo[]` 和 `(MyInterfaceOne|MyInterfaceTwo)[]` 有什么区别

angularjs - 使用 Typescript 在 AngularJS 中注入(inject)工厂

typescript - 创建将为对象属性赋值的通用 TypeScript 函数

javascript - 为 CommonJS 模块 (Typescript) 导出附加接口(interface)

angular - 为什么打字工具会故意创建重复的打字集?

javascript - 如何用参数和模板文字来描述函数?

javascript - 如何访问类函数内的类变量?

typescript - 如何将 Firebase 参数化配置与 Typescript 一起用于 Cloud Functions?

cordova - Angular 2/ionic 2 从本地设备文件系统读取 json 文件