gpt4 book ai didi

TypeScript 将 camelCase 键转换为 snake_case

转载 作者:行者123 更新时间:2023-12-05 06:21:15 27 4
gpt4 key购买 nike

假设我们有一些具有驼峰式属性的对象类型:

type Foo = {
propertyBob: string;
propertyJane?: number;
}

有没有什么方法可以创建一个将 camelCase 转换为 snake_case 的泛型?例如。

type foo_snake = Snakeify<Foo>; 
/*
{
property_bob: string;
property_jane?: number;
}
*/

最佳答案

现在 TypeScript 有 template literal types , 所以这实际上是可能的。

type-fest包为 snake_casekebab-casecamelCase 等实现了几个这样的转换器

这个特定的转换器与您想要的相反,但实现起来最简单:

type SnakeCaseToPascalCase<S extends string> =
S extends `${infer A}_${infer B}`
? `${Capitalize<A>}${SnakeCaseToPascalCase<B>}`
: Capitalize<S>

const snakeToPascal =
<S extends string>(s: S): SnakeCaseToPascalCase<S> =>
s.split('_')
.map(word => word[0].toUpperCase() + word.slice(1))
.join("") as any

const pascalCase = snakeToPascal("get_abstract_singleton_manager")
// pascalCase: "GetAbstractSingletonManager"

然后您可以将此转换器与 mapped type 一起使用:

type SnakeToPascal<M extends Record<string, any>> =
{[K in keyof M as SnakeCaseToPascalCase<K & string>]: M[K]}

type User = SnakeToPascal<{
first_name: string,
last_name: string,
}>
// inferred as: {
// FirstName: string;
// LastName: string;
// }

关于TypeScript 将 camelCase 键转换为 snake_case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59938016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com