TypeScript中常量如何转换成type枚举类型?

有以下一组常量

const data = [
  {key: 'a', value: '值1'},
  {key: 'b', value: '值2'},
  {key: 'c', value: '值3'},
  {key: 'd', value: '值4'},
]

类似下拉选择的操作, 我想把 key 赋值给一个新的变量,怎么快速的获得 key的枚举?

老实写法:

type DataKey = 'a' | 'b' | 'c' | 'd'
const x:DataKey = 'b'
阅读 5.2k
1 个回答
const data = [
  {key: 'a', value: '值1'},
  {key: 'b', value: '值2'},
  {key: 'c', value: '值3'},
  {key: 'd', value: '值4'},
] as const;

type O = typeof data;

type R = {
    [key in keyof O]: O[key] extends {key: any, value: any} ? O[key]['key'] : never;
}[keyof O]