TypeScript 如何做异常处理
在开发网页或小程序时,你肯定遇到过这样的情况:明明写好的功能,运行到一半突然报错,页面直接卡住,用户看着一片空白,你却不知道问题出在哪。这就是程序里的“异常”——就像你出门没看天气预报,突然遇到暴雨,没带伞只能淋着走。
用TypeScript写代码时,异常处理就像提前准备好雨伞和雨衣,遇到“暴雨”时不会直接淋透,还能及时调整路线。接下来我们就用生活化的例子,一步步搞懂TypeScript里的异常处理到底怎么用。

最基础的:try-catch 拦截“突发状况”
假设你写了个函数,用来算用户的月消费:输入“日均消费”乘以“天数”,就能得到总金额。但如果用户不小心填了“abc”这种不是数字的内容,直接运行就会报错,页面直接崩。这时候用try-catch就像给函数加了个“安全门”:
`typescript
function calculateExpense(daily: string, days: number) {
try {
// 尝试执行可能出错的代码
const dailyNum = Number(daily);
if (isNaN(dailyNum)) throw new Error("日均消费必须是数字哦");
return dailyNum * days;
} catch (err) {
// 出错了就走这里,不会影响其他代码
console.log("温馨提示:", (err as Error).message);
return "请输入正确的数字再试";
}
}
`
试一下:如果输入calculateExpense("五十", 30),try里会发现“五十”转不成数字,主动抛出错误,catch就会输出提示,返回友好的文字,页面不会崩。这就是最常用的异常拦截,相当于你出门遇到下雨,撑开伞就不会被淋湿。
进阶:用 throw 主动“抛出问题”
刚才的例子里,我们在函数里主动说了“日均消费必须是数字”,这就是主动抛出异常。很多时候,程序里的错误不是自动出现的,而是需要我们提前判断:比如你要检查用户的年龄,输入负数肯定不对,这时候就用throw把问题抛出去,让外面的代码处理。
比如你写了个买电影票的函数,年龄不能小于0:
`typescript
function buyTicket(age: number) {
if (age < 0) {
// 主动抛出错误,把问题告诉调用的地方
throw new Error("年龄不能是负数哦,是不是输反啦?");
}
return "购票成功";
}
`
如果有人调用buyTicket(-5),直接运行会报错,这时候就要用try-catch包裹这个函数,才能不让程序崩。这就像你出门前检查钱包,发现没带钱,主动说“今天没法出门”,而不是走到半路才说“没带钱回不去了”。
收尾:finally 做“必须完成的事”
有些事情不管有没有出错,都得做完,比如你出门不管有没有下雨,都得把家门锁上。finally就是干这个的,不管try里成功还是catch里出错,finally里的代码一定会执行。
比如你想统计用户的操作次数,不管函数有没有出错,都要把次数加1:
`typescript
let operationCount = 0;
function checkInput(input: string) {
try {
operationCount++; // 先加次数
if (input.length > 10) throw new Error("输入不能超过10个字");
return "输入合法";
} catch (err) {
return (err as Error).message;
} finally {
// 不管有没有错,都把次数再加一次
operationCount++;
}
}
console.log(checkInput("很长很长的输入内容")); // 输出错误提示
console.log(operationCount); // 结果是2:try里加1,finally里再加1
`
这个例子里,不管输入的内容合不合法,operationCount最后都会加2,就像你不管有没有遇到下雨,出门都要锁家门,不会因为下雨就忘了锁门。
实际开发里的小细节
平时做项目时,别把所有代码都塞在一个try-catch里,比如把“计算消费”和“检查年龄”的错误分开处理,这样出问题时能快速找到是哪块的错。另外,抛出错误时尽量说清楚问题,别只写“出错了”,不然排查起来会像大海捞针。
就像你带伞出门,遇到小雨就用小雨伞,遇到大雨就用大雨伞,用try-catch、throw、finally这几个工具,根据不同的异常情况选合适的处理方式,就能让你的程序少出问题,用户体验也会好很多。