MST

星途 面试题库

面试题:TypeScript中泛型与映射类型结合实现属性转换

请编写一个TypeScript函数,使用泛型和映射类型将一个对象的所有属性从驼峰命名法转换为下划线命名法。例如输入 `{userName: 'John'}`,输出 `{user_name: 'John'}`。
40.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
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);