面试题答案
一键面试type CamelToSnakeCase<S extends string> =
S extends `${infer T}${infer U}`
? `${T extends Capitalize<T> ? '_' : ''}${Lowercase<T>}${CamelToSnakeCase<U>}`
: S;
type ConvertObjectKeys<T> = {
[K in keyof T as CamelToSnakeCase<string & K>]: T[K];
};
function convertObjectKeysToSnakeCase<T extends object>(obj: T): ConvertObjectKeys<T> {
const result: any = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const snakeCaseKey = key.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
result[snakeCaseKey] = obj[key];
}
}
return result;
}
你可以这样调用这个函数:
const input = {userName: 'John'};
const output = convertObjectKeysToSnakeCase(input);
console.log(output);