TypeScript 中的 a | b
表示类型联合(Union Types),它允许变量可以是类型 a
或类型 b
中的任意一种。这种类型系统特性使得 TypeScript 能够更精确地描述数据的多种可能性,从而提高代码的健壮性和可维护性。
联合类型可以是任意两种或多种类型的组合。例如:
type StringOrNumber = string | number;
type Person = { name: string } | { age: number };
当使用联合类型时,可能会遇到需要区分具体类型的情况。这时可以使用类型保护(Type Guards)来解决。
问题示例:
function processValue(value: string | number) {
if (typeof value === "string") {
// value 在这里是 string 类型
console.log(value.toUpperCase());
} else {
// value 在这里是 number 类型
console.log(value.toFixed(2));
}
}
解决方法:
使用 typeof
、instanceof
或自定义类型保护函数来区分联合类型中的具体类型。
function isString(value: string | number): value is string {
return typeof value === "string";
}
function processValue(value: string | number) {
if (isString(value)) {
console.log(value.toUpperCase());
} else {
console.log(value.toFixed(2));
}
}
有时需要明确地告诉编译器某个值的类型,这时可以使用类型断言(Type Assertion)。
问题示例:
function getLength(value: string | number): number {
return value.length; // 错误:number 类型没有 length 属性
}
解决方法:
使用类型断言来明确告诉编译器 value
的类型。
function getLength(value: string | number): number {
if ((value as string).length) {
return (value as string).length;
}
throw new Error("Value is not a string");
}
通过以上内容,你应该对 TypeScript 中的联合类型 a | b
有了更全面的了解,包括其基础概念、优势、类型、应用场景以及常见问题的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云