如何将以下类型转换为具有键/值对的数组?

type MyObject = {
  foo: 'bar'
  baz: 'qux'
}

我想要的类型:

type MyKeyValuePair = ['foo', 'bar'] | ['baz', 'qux']

我try 过KeyOf等的各种组合,但它永远不会以联合类型结束,在联合类型中,它们首先在数组中进行参数设置,然后与特定值相匹配.

推荐答案

您需要使用Typesript的强大功能--使用映射类型和条件类型.以下是步骤:

  1. 使用辅助对象类型将单个键转换为元组:

    type ToTuple<T, K extends keyof T> = [K, T[K]];

  2. 使用映射类型将此辅助对象类型应用于对象类型中的每个关键点:

type TupleMap<T> = {
  [K in keyof T]: ToTuple<T, K>;
}[keyof T];
  1. 现在,您可以对MyObject类型应用TupleMap以获得所需的结果:
type MyObject = {
  foo: 'bar';
  baz: 'qux';
}

type MyKeyValuePair = TupleMap<MyObject>;  // ['foo', 'bar'] | ['baz', 'qux']

祝好运!

Typescript相关问答推荐

角形标题大小写所有单词除外

当我点击外部按钮时,如何打开Html Select 选项菜单?

基于平台的重定向,Angular 为16

使Typescribe强制所有对象具有相同的 struct ,从两个选项

如何在TypeScrip中使用嵌套对象中的类型映射?

material 表不渲染任何数据

TypeScrip表示该类型不可赋值

仅针对某些状态代码重试HTTP请求

为什么T[数字]不也返回UNDEFINED?

CDK从可选的Lambda角色属性承担角色/复合主体中没有非空断言

有没有可能产生输出T,它在视觉上省略了T中的一些键?

通过泛型函数本身推断受约束的泛型参数的类型脚本问题

为什么我在这个重载函数中需要`as any`?

在Cypress中,是否可以在不标识错误的情况下对元素调用.Click()方法?

如何在打字角react 式中补齐表格组

使用RXJS获取数据的3种不同REST API

获取类属性的类型';TypeScript中的getter/setter

对于通过 Axios 获取的数据数组,属性map在类型never上不存在

对象可能未定义(通用)

Typescript,如何从对象的对象中获取分离的类型