Guía de claves de objeto en TypeScript
Convertir claves de objeto a camelCase en TypeScript
Las apps TypeScript suelen necesitar transformación runtime y una forma de tipo correspondiente para payloads snake_case.
Implementación en TypeScript
type CamelCase<S extends string> =
S extends `${infer Head}_${infer Tail}`
? `${Lowercase<Head>}${Capitalize<CamelCase<Tail>>}`
: Uncapitalize<S>
type Camelize<T> =
T extends readonly (infer Item)[] ? Camelize<Item>[] :
T extends Record<string, unknown> ? { [K in keyof T as K extends string ? CamelCase<K> : K]: Camelize<T[K]> } : T
function toCamelKey(key: string) {
return key.replace(/[-_]+([a-zA-Z0-9])/g, (_, char: string) => char.toUpperCase())
}
function keysToCamel<T>(value: T): Camelize<T> {
if (Array.isArray(value)) return value.map(keysToCamel) as Camelize<T>
if (value === null || typeof value !== "object") return value as Camelize<T>
const output: Record<string, unknown> = {}
for (const [key, child] of Object.entries(value)) {
const nextKey = toCamelKey(key)
if (Object.hasOwn(output, nextKey)) throw new Error(`Key collision: ${nextKey}`)
output[nextKey] = keysToCamel(child)
}
return output as Camelize<T>
}Un mapped type recursivo puede describir claves renombradas y conservar la estructura de arrays.
El tipo no transforma datos de red; sigue siendo necesaria una función runtime.
Casos límite en producción
- Reglas complejas de acrónimos pueden hacer divergir runtime y type-level.
- Las colisiones de claves siguen siendo un problema de datos runtime.
- Symbol keys e instancias no JSON deben manejarse explícitamente.
- Si se preservan prefijos semánticos en runtime, refleja esas excepciones en tipos si hace falta.
Probar claves de objeto online
Pega un objeto JSON para probar conversión recursiva, solo nivel superior, exclusiones, prefijos _/$ y colisiones.
Suelta un archivo .json o elige uno de tu dispositivo
Los archivos se leen solo en tu navegador. Tamaño máximo: 5 MB.
JSON convertido
{
"userProfile": {
"firstName": "Ada",
"createdAt": "2026-09-12"
}
}El análisis, lectura de archivos, formato y conversión se ejecutan localmente en tu navegador. El JSON no se envía a un servidor de conversión.