MST

星途 面试题库

面试题:TypeScript泛型与条件类型及映射类型的综合应用

假设你有一个接口 `User`,包含属性 `name`(字符串)、`age`(数字)、`isAdmin`(布尔)。编写一个TypeScript类型转换函数,使用泛型、条件类型和映射类型,该函数接受一个 `User` 对象和一个字符串数组,字符串数组中的元素对应 `User` 接口的属性名。函数返回一个新对象,新对象仅包含字符串数组中指定的属性,并且属性类型变为 `string | undefined`。例如,传入 `{name: 'John', age: 30, isAdmin: true}` 和 `['name', 'isAdmin']`,返回 `{name: 'John', isAdmin: 'true'}`。如果原对象中属性值为 `null` 或 `undefined`,在新对象中对应属性值为 `undefined`。
49.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
interface User {
    name: string;
    age: number;
    isAdmin: boolean;
}

function pickAndConvert<T extends keyof User>(user: User, keys: T[]): {
    [K in T]: string | undefined;
} {
    const result: any = {};
    keys.forEach(key => {
        if (user[key] !== null && user[key]!== undefined) {
            result[key] = String(user[key]);
        } else {
            result[key] = undefined;
        }
    });
    return result;
}