Typescript 将键映射为大写

Oma*_*ani 6 typescript

我有以下对象:

const foo = {
  fieldAnt: "foo",
  fieldCab: "baz"
};
Run Code Online (Sandbox Code Playgroud)

我想自动将其映射到键为大写并带下划线的类型:

type FIELDS = {
  FIELD_ANT: "fieldAnt",
  FIELD_CAB: "fieldCab" 
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用keyof打字稿或类型映射以编程方式实现此目的?

Bus*_*men 9

有点晚了:P但是,在一点帮助下我能够做到这一点:

const foo = {
  fieldAnt: "foo",
  fieldCab: "baz"
};

type CamelToSnakeCase<S extends string> =
  S extends `${infer T}${infer U}` ?
  `${T extends Capitalize<T> ? "_" : ""}${Lowercase<T>}${CamelToSnakeCase<U>}` :
  S

type Convert<T> = { [P in keyof T as Uppercase<CamelToSnakeCase<string & P>>]: P }

type Fields = Convert<typeof foo>
// type Fields = {
//  FIELD_ANT: "fieldAnt",
//  FIELD_CAB: "fieldCab" 
// }
Run Code Online (Sandbox Code Playgroud)

TS游乐场