使用as断言确实像"强行给变量贴标签",容易藏坑。更稳妥的办法其实是"先验证,再使用",就像收到快递先检查是不是自己买的东西再拆:
function isUserInfo(data: any): data is UserInfo {
// 一步一步验:是不是对象?有没有name?name是不是字符串?
return data && typeof data === 'object'
&& typeof data.name === 'string'
&& typeof data.age === 'number';
}
// 用的时候先安检
if (isUserInfo(未知数据)) {
// 这里TypeScript会乖乖承认这是UserInfo类型
} else {
// 数据不对就报错提醒,别硬用
console.error('这数据格式不对啊!');
}as number,先转成数字:// 不好的方式:强行断言
const age = 后端数据.age as number;
// 好的方式:先转换再确定类型
const age = Number(后端数据.age); // 转成数字,就算失败也是NaN
if (!isNaN(age)) {
// 确认是有效数字再用
}function formatUser(rawData: any): UserInfo {
return {
name: rawData.name || '未知', // 兜底,避免undefined
age: rawData.age ? Number(rawData.age) : 0
};
}
// 处理后的数据类型就稳了
const user = formatUser(后端数据);说白了,就是别偷懒直接"断言",而是主动检查、转换数据,让类型真正匹配,这样运行时就不容易出幺蛾子~