function printValue(value: string | boolean) {
if (typeof value === 'boolean') {
console.log(value);
} else {
console.log(value.length);
}
}
// 类型保护
// 作用:在运行时根据条件检查来缩小联合类型的范围,从而让TypeScript知道在某个代码块内变量的具体类型,提高类型安全性。
// 使用场景:当需要根据不同类型执行不同逻辑,且可以通过某些运行时检查(如typeof、instanceof等)来区分类型时使用。
// 类型断言
// 作用:告诉TypeScript编译器,某个变量是什么类型,绕过编译器的类型检查,强制指定类型。
// 使用场景:当开发者比TypeScript编译器更明确变量的实际类型时使用。例如,已经通过其他方式确认了变量的类型,但编译器无法自动推断时。
// 如果要使用类型断言实现printValue函数
function printValueWithAssertion(value: string | boolean) {
if ((value as boolean).toString) {
console.log((value as string).length);
} else {
console.log(value as boolean);
}
}