typescript - 打字稿将键映射到大写
问题描述
我有以下对象:
const foo = {
fieldAnt: "foo",
fieldCab: "baz"
};
我想自动将其映射到一种类型,其中键为大写并带有下划线:
type FIELDS = {
FIELD_ANT: "fieldAnt",
FIELD_CAB: "fieldCab"
}
是否可以使用keyof
或类型映射通过打字稿以编程方式实现这一目标?
解决方案
有点晚了: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"
// }
推荐阅读
- node.js - 从包中排除文件(Webpack)
- java - 休息服务中 ResourceFile 的 CDI
- python - python排序没有ordereddict的字母数字列表
- c# - 转换器在绑定到 EF 模型时显示 System.Data.Entity.DynamicProxies
- c# - Entity Framework Core,从嵌套集合中删除项目
- r - R:每个比较对的整齐行
- python-3.x - Python 使可变对象的行为不可变
- html - Boostrap 4 让容器像孩子一样大
- java - 根据答案,某些字段仍处于隐藏状态的调查
- perl - 在调用模块方法时传递的模块引用