面试题答案
一键面试联合类型提升性能的实际开发场景举例
在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
类型没有该属性,所以会报错。这体现了联合类型在类型推断时的严谨性,防止我们在可能不兼容的类型上进行操作。
联合类型在类型保护方面的应用
类型保护是一种机制,允许我们在运行时确定联合类型中实际的类型。常见的类型保护方法有 typeof
、instanceof
等。例如:
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
方法。这确保了代码在运行时不会因为类型不匹配而报错,同时也充分利用了联合类型带来的灵活性。