MST

星途 面试题库

面试题:TypeScript在泛型场景下深度运用keyof和in构建映射类型

设计一个泛型函数`createMappedType`,它接受一个泛型类型参数`T`。`T`是一个对象类型,该函数返回一个新的映射类型。新类型需满足:如果`T`中的某个属性值类型本身又是一个对象类型,那么在新类型中,这个属性的所有子属性都要提升一级,并且属性名前加上原属性名作为前缀,用下划线连接。例如,若`T = { a: { b: string } }`,则返回的映射类型应为`{ a_b: string }`。使用`keyof`和`in`操作符结合递归泛型来实现该函数。
20.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type FlattenObject<T, Prefix extends string = ''> = {
    [K in keyof T]: T[K] extends object
      ? FlattenObject<T[K], `${Prefix}${K}_`>
       : `${Prefix}${K}` extends never
          ? never
           : { [Key in `${Prefix}${K}`]: T[K] };
}[keyof T];

function createMappedType<T extends object>(): FlattenObject<T> {
    return {} as FlattenObject<T>;
}