MST
星途 面试题库

面试题:TypeScript函数重载在复杂场景下的应用与优化

在一个大型前端项目中,有一个处理用户输入数据的函数`processInput`。输入数据可能是多种格式的数组,如`[string, number]`、`[boolean, string, number]`等不同长度和类型组合。要求使用函数重载实现该函数,并说明在处理如此复杂的重载情况时,如何优化代码结构和类型检查,以避免潜在的错误和提高代码的可维护性。
20.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

函数重载实现

function processInput(input: [string, number]): void;
function processInput(input: [boolean, string, number]): void;
function processInput(input: any[]): void {
    if (Array.isArray(input)) {
        if (input.length === 2 && typeof input[0] ==='string' && typeof input[1] === 'number') {
            // 处理 [string, number] 格式
            console.log('处理 [string, number] 格式:', input);
        } else if (input.length === 3 && typeof input[0] === 'boolean' && typeof input[1] ==='string' && typeof input[2] === 'number') {
            // 处理 [boolean, string, number] 格式
            console.log('处理 [boolean, string, number] 格式:', input);
        } else {
            console.log('不支持的格式:', input);
        }
    } else {
        console.log('输入不是数组');
    }
}

优化代码结构和类型检查的方法

  1. 类型别名和接口:使用类型别名或接口来定义不同格式的数组类型,这样可以提高代码的可读性和可维护性。
type StringNumberArray = [string, number];
type BooleanStringNumberArray = [boolean, string, number];

function processInput(input: StringNumberArray): void;
function processInput(input: BooleanStringNumberArray): void;
function processInput(input: any[]): void {
    // 处理逻辑不变
}
  1. 集中类型检查:将类型检查逻辑集中在一个地方,避免在多个重载函数中重复编写相同的类型检查代码。
  2. 使用类型断言:在确定类型后,可以使用类型断言来明确告诉编译器变量的类型,从而减少不必要的类型检查。
  3. 单元测试:编写单元测试来验证函数在不同输入格式下的正确性,确保函数重载和类型检查的逻辑没有错误。
  4. 文档化:为函数添加详细的注释,说明每个重载函数的输入要求和功能,方便其他开发者理解和维护代码。