假设我有一个这样的界面
interface Example {
first_name: string,
last_name: string,
home_town: string,
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种通用的方法Camelize,Example如果它们被骆驼化而不是下划线,则可以将所有密钥转换为有效。
const e: Camelize<Example> = {
firstName: 'string',
lastName: 'string',
homeTown: 'string'
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
jca*_*alz 11
TypeScript 4.1 将在映射类型中引入模板文字类型和键扩充(请参阅microsoft/TypeScript#40336),此时您可以通过以下方式实现:
type CamelizeString<T extends PropertyKey> =
T extends string ? string extends T ? string :
T extends `${infer F}_${infer R}` ? `${F}${Capitalize<CamelizeString<R>>}` : T : T;
type Camelize<T> = { [K in keyof T as CamelizeString<K>]: T[K] }
type CamelizeExample = Camelize<Example>;
/* type CamelizeExample = {
firstName: string;
lastName: string;
homeTown: string;
} */
const e: Camelize<Example> = {
firstName: 'string',
lastName: 'string',
homeTown: 'string'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1613 次 |
| 最近记录: |