MST

星途 面试题库

面试题:TypeScript接口与泛型结合在处理异构数据结构及动态类型转换中的应用

在前端开发中,有时会遇到从后端获取的异构数据结构,例如一个对象数组,每个对象可能有不同的属性组合。你需要编写一个函数,该函数能根据传入的不同规则,将这些异构数据转换为特定的类型结构。请使用TypeScript的接口与泛型,设计一个灵活且类型安全的解决方案。描述你的设计思路,并详细说明如何处理动态类型转换以及确保整个过程的类型安全,给出核心代码示例。
19.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义接口:使用接口来描述异构数据可能的结构以及目标数据结构。
  2. 泛型:通过泛型让函数能够处理不同类型的数据,提高代码的复用性。
  3. 动态类型转换:利用类型断言以及类型守卫来确保类型安全的转换。

处理动态类型转换与类型安全

  1. 类型断言:在已知数据符合某种类型时,使用类型断言告诉编译器数据的实际类型。
  2. 类型守卫:通过编写类型守卫函数,在运行时检查数据是否符合预期类型,确保转换的安全性。

核心代码示例

// 定义异构数据可能的接口
interface HeterogeneousObject {
    [key: string]: any;
}

// 定义转换规则接口
interface TransformationRule<T> {
    (data: HeterogeneousObject): T;
}

// 转换函数
function transformData<U>(
    dataArray: HeterogeneousObject[], 
    rule: TransformationRule<U>
): U[] {
    return dataArray.map(rule);
}

// 示例规则
const exampleRule: TransformationRule<{ id: number; name: string }> = (data) => {
    if ('id' in data && 'name' in data) {
        return {
            id: data.id as number,
            name: data.name as string
        };
    }
    throw new Error('Data does not match the required structure');
};

// 示例异构数据
const heterogeneousData: HeterogeneousObject[] = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' }
];

// 使用转换函数
const result = transformData(heterogeneousData, exampleRule);
console.log(result);