在TypeScript中,处理具有变量的联合类型时,可以使用类型保护、类型断言或类型推断等方法来选择特定的类型。以下是一些常用的方法:
类型保护是一种运行时检查,用于缩小变量的类型范围。
function isString(value: any): value is string {
return typeof value === 'string';
}
function example(value: string | number) {
if (isString(value)) {
// 在这个块中,value 被推断为 string 类型
console.log(value.toUpperCase());
} else {
// 在这个块中,value 被推断为 number 类型
console.log(value.toFixed(2));
}
}
类型断言允许你告诉编译器某个值的具体类型。
function example(value: string | number) {
if ((value as string).toUpperCase) {
// 在这个块中,value 被断言为 string 类型
console.log((value as string).toUpperCase());
} else {
// 在这个块中,value 被断言为 number 类型
console.log((value as number).toFixed(2));
}
}
typeof
和 instanceof
typeof
和 instanceof
操作符也可以用于类型保护。
function example(value: string | number) {
if (typeof value === 'string') {
// 在这个块中,value 被推断为 string 类型
console.log(value.toUpperCase());
} else {
// 在这个块中,value 被推断为 number 类型
console.log(value.toFixed(2));
}
}
在更复杂的场景中,可以使用泛型和条件类型来处理联合类型。
type ExtractType<T> = T extends string ? string : number;
function example<T>(value: T): ExtractType<T> {
if (typeof value === 'string') {
return value.toUpperCase() as ExtractType<T>;
} else {
return value.toFixed(2) as ExtractType<T>;
}
}
问题:类型保护或断言不正确,导致运行时错误。
解决方法:
console.log
或调试工具检查变量的实际类型。通过这些方法,你可以有效地从具有变量的联合类型中选择和处理特定的类型。
领取专属 10元无门槛券
手把手带您无忧上云