持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
2.6 错误处理
其实不管是写业务,还是开发框架,错误处理都特别重要,不但觉得了框架的健壮性,也会觉得用户开发的程序的健壮性,这里就讲了如何在设计框架时降低用户的心智负担。
书中用了一个小例子,这个函数接受一个回调函数,并调用。
const func = (cb)=>{
cb && cb()
}
//使用的时候
func(()=>{
// do sth
})
那么如果回调函数报错了,我们怎么处理呢?最简单的办法是try catch
我们一般会在回调函数里写上
func(()=>{
try {
// do sth
} catch(e){
// meet some error
}
})
但是每次都写try catch不方便,我们再封装一层
const callWithErrorHandling = (cb)=>{
try {
cb && cb()
} catch(e){
// meet some error
}
}
这样一来,我们的func就变成了
const func = (cb)=>{
callWithErrorHandling(cb)
}
有没有想到vue哪里用到了这个方法呢?没错就是监听全局错误处理
app.config.errorHandler = function(err, vm, info){}
其实,我们很难写出没有bug的代码,但其实,我们可以在错误处理上再多下功夫,尽量把bug消灭在萌芽之中。
2.7 良好的typescript支持
typescript支持与用typescript编写是2个概念。
现在很多三方库,都会说自己是用typescript编写的。但是,当你真正用起来的时候,你会发现,代码提示依旧没有。 于是你翻到源码,你就会发现许多如下代码
export const api(one:any):void = ()=>one
const data:any = null
data.one = '1'
这叫不叫typescript?当然是的,但是这绝不是良好的typescript支持。我们用typescript就是希望获得类型,如果你总是用any,unkown这些东西,写出来的东西也不算有类型。
比如那个api函数,我们这样改造一下
export const api = function<T extends any>(one:T):T{
return one
}
这样就是实现了一定程度的类型推断。但其实,我觉得typescript还是非常难的,很多东西很难理解,因为我一开始学js的时候就没有类型这个概念,我不会去强制要求自己某个变量一直是这个类型,总是随意赋值,出来bug就是打断点或者console。
对于以前简单的jquery或者原生js的页面,这样做问题不大,但是随着vue,react这些框架越来越复杂,业务也越来越复杂,加上类型是很有必要的,我们通过类型可以预防很多错误,比如一个布尔型变量,你却用了数组的方法。
这一部分vue2做的仍有欠缺,但是vue3已经改进了许多,最起码我使用vue3+TS起来很舒服,也很方便