// 定义交叉类型
type StringNumberCross = {
length?: number;
toFixed?: (digits: number) => string;
};
function processValue(value: string | number): number | string {
if (typeof value ==='string') {
const crossValue: StringNumberCross = value as any;
return crossValue.length || value.length;
} else {
const crossValue: StringNumberCross = value as any;
return crossValue.toFixed? crossValue.toFixed(2) : (value * value).toString();
}
}
联合类型和交叉类型在函数参数类型检查中的作用及注意点:
- 联合类型作用:在函数参数中使用联合类型(如
string | number
),可以使函数接受多种类型的参数,增强函数的通用性。它允许在函数内部通过类型检查(如 typeof
)来对不同类型的值进行不同的处理逻辑。
- 联合类型注意点:在函数内部处理联合类型参数时,需要进行类型保护(如
typeof value ==='string'
),以确保在使用特定类型的属性或方法时不会出现类型错误。同时,不能直接对联合类型使用仅属于其中某一种类型的属性或方法,必须先进行类型判断。
- 交叉类型作用:交叉类型(如
StringNumberCross
)用于将多个类型的属性合并到一个类型中。在函数内部,通过将值断言为交叉类型,可以使用假设合并后的属性和方法,在一定程度上模拟对多种类型通用的操作逻辑。
- 交叉类型注意点:由于交叉类型是将属性合并,可能会出现属性名冲突或属性类型不兼容的问题。并且使用交叉类型时,需要通过类型断言(
as any
)来绕过类型检查,这可能会带来潜在的运行时错误,所以要谨慎使用。