联合类型(Union Types)
联合类型(Union Types)是 TypeScript 中的一种高级类型,它允许一个变量可以存储多种类型的值。具体来说,联合类型用 |
符号将多个类型进行组合。例如,string | number
表示该变量可以存储字符串或数字类型的值。
联合类型的特点是灵活多样,可以应对不同的数据类型。它允许我们在某个位置期望多个可能的类型,并根据实际情况使用不同的类型。
优点:
- 提供了更灵活的数据类型定义,适用于不确定变量类型的情况。
- 可以避免使用 any 类型,提高类型安全性。
- 有效地支持方法重载和函数重载。
缺点:
- 在使用联合类型时,我们需要进行额外的类型检查和类型保护,以确保代码的正常运行。
- 可能增加代码复杂性,需要根据不同类型进行逻辑处理。
应用场景:
- 当一个变量可能有多种类型时,可以使用联合类型进行定义。
- 在不确定一个变量的具体类型时,可以使用联合类型进行类型保护。
- 用于方法重载和函数重载,以支持不同类型的参数和返回值。
下面是一个简单的代码案例,展示了如何使用联合类型:
function printValue(value: string | number): void {
console.log(value);
}
// 调用 printValue 函数
printValue("hello"); // 输出:hello
printValue(123); // 输出:123
在上述案例中,printValue
函数的参数 value
的类型是 string | number
,它可以接收字符串或数字类型的值。通过使用联合类型,我们可以灵活地调用并传递不同类型的值。
需要注意的是,当我们在使用联合类型的值时,需要进行类型检查和类型保护。这可以通过类型断言、类型保护函数、typeof 和 instanceof 运算符来实现。
当涉及到联合类型时,我们必须注意如何进行类型保护,以确保安全地操作变量。以下是几个使用联合类型的代码案例,并展示了不同的类型保护方法:
案例1: 类型断言
function printValue(value: string | number): void {
if (typeof value === "string") {
// 使用类型断言,将 value 视为字符串类型
console.log(value.toUpperCase());
} else {
// 使用类型断言,将 value 视为数字类型
console.log(value.toFixed(2));
}
}
printValue("hello"); // 输出:HELLO
printValue(3.14159); // 输出:3.14
案例2: 类型保护函数
// 定义类型保护函数,判断是否为字符串
function isString(value: