MST

星途 面试题库

面试题:TypeScript类型系统中如何优化联合类型的使用

在TypeScript中,联合类型常用于表示一个值可能是多种类型之一。请举例说明在实际开发场景中,如何合理使用联合类型以提升性能,并阐述联合类型在类型推断和类型保护方面的应用。
11.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

联合类型提升性能的实际开发场景举例

在Web开发中,假设我们有一个函数用于处理用户输入的内容,用户可能输入字符串或者数字。例如,一个简单的加法函数,它可以接收两个数字相加,也可以接收两个字符串形式的数字并转换为数字后相加。

function add(a: string | number, b: string | number): number {
    if (typeof a ==='string') {
        a = parseInt(a);
    }
    if (typeof b ==='string') {
        b = parseInt(b);
    }
    return a + b;
}

这样通过联合类型 string | number,我们的函数可以处理多种输入类型,减少了代码的重复,从某种程度上提升了代码的复用性和整体性能。如果不使用联合类型,我们可能需要为字符串和数字分别编写不同的函数。

联合类型在类型推断方面的应用

TypeScript的类型推断机制在联合类型中发挥作用。例如:

let value: string | number;
value = 10;
let length: number = value.length; // 报错,因为类型推断value可能是number,number没有length属性

这里TypeScript根据 value 的联合类型 string | number 进行类型推断,当我们尝试访问 length 属性时,由于 number 类型没有该属性,所以会报错。这体现了联合类型在类型推断时的严谨性,防止我们在可能不兼容的类型上进行操作。

联合类型在类型保护方面的应用

类型保护是一种机制,允许我们在运行时确定联合类型中实际的类型。常见的类型保护方法有 typeofinstanceof 等。例如:

function printValue(value: string | number) {
    if (typeof value ==='string') {
        console.log(value.length);
    } else {
        console.log(value.toFixed(2));
    }
}

在这个函数中,通过 typeof 进行类型保护,在 if 代码块内,TypeScript 能够明确 value 的类型,从而可以安全地访问 string 类型的 length 属性或者 number 类型的 toFixed 方法。这确保了代码在运行时不会因为类型不匹配而报错,同时也充分利用了联合类型带来的灵活性。