MST

星途 面试题库

面试题:TypeScript 联合类型与交叉类型的深度应用及类型推导

定义一个类型工具 `UnionToIntersection`,它可以将联合类型转换为交叉类型。例如 `UnionToIntersection<{a: string} | {b: number}>` 应得到 `{a: string} & {b: number}`。然后定义一个函数 `handleData`,它接收一个参数,参数类型是由三个类型 `{id: string}`、`{name: string}`、`{email: string}` 组成的联合类型。在函数内部,需要将这个联合类型转换为交叉类型,并基于此交叉类型创建一个新对象,新对象的属性值都是从原参数对象中获取并做相应处理(例如将 `name` 转为大写,`email` 加上固定后缀)后的值,最后返回这个新对象。请用 TypeScript 完整实现上述功能。
48.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;

function handleData(data: {id: string} | {name: string} | {email: string}) {
    const newData = {} as UnionToIntersection<{id: string} | {name: string} | {email: string}>;
    if ('id' in data) {
        newData.id = data.id;
    }
    if ('name' in data) {
        newData.name = data.name.toUpperCase();
    }
    if ('email' in data) {
        newData.email = data.email + '@example.com';
    }
    return newData;
}