MST

星途 面试题库

面试题:TypeScript中利用条件类型和映射类型深度避免重复类型信息

假设有一个复杂的业务场景,存在一个类型`BaseData`,它有多个属性。现在需要基于`BaseData`创建一系列变体类型,这些变体类型有的是部分属性可选,有的是属性类型转换(例如将所有字符串属性转换为大写字符串类型)。请使用TypeScript的条件类型和映射类型,尽可能优雅地实现这些变体类型,同时保证类型信息的一致性,避免重复定义相同的类型结构。详细说明你的实现思路,并写出完整的TypeScript类型定义代码。
31.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 部分属性可选:使用映射类型遍历BaseData的属性,通过条件类型判断哪些属性需要变为可选。
  2. 属性类型转换:同样使用映射类型,结合条件类型,判断属性类型是否为字符串,若是则转换为大写字符串类型。

TypeScript类型定义代码

// 基础类型
type BaseData = {
    name: string;
    age: number;
    address: string;
};

// 部分属性可选的变体类型,例如name属性变为可选
type OptionalNameBaseData = {
    [K in keyof BaseData]: K extends 'name'? BaseData[K] | undefined : BaseData[K];
};

// 将所有字符串属性转换为大写字符串类型的变体类型
type UpperCaseStringBaseData = {
    [K in keyof BaseData]: BaseData[K] extends string? Uppercase<BaseData[K]> : BaseData[K];
};