强制javascript开发人员处理异常

强制javascript开发人员处理异常,javascript,typescript,try-catch,eslint,Javascript,Typescript,Try Catch,Eslint,为了描述函数抛出异常的可能性,我们可以使用JSDock /** * @throws {Error} */ export const a = () => { throw new Error("i am exist only to throw exceptions...") } 好的,很可爱。 但开发人员可能会错过这个描述,并且不会将函数包装在try…catch中 我怎样才能强制typescript/IDE/ES lint告诉我我忘记在try…catch中包装函数 我是否应该考虑一个

为了描述函数抛出异常的可能性,我们可以使用JSDock

/**
 * @throws {Error}
 */
export const a = () => {
  throw new Error("i am exist only to throw exceptions...")
}
好的,很可爱。 但开发人员可能会错过这个描述,并且不会将函数包装在try…catch中

我怎样才能强制typescript/IDE/ES lint告诉我我忘记在try…catch中包装函数

我是否应该考虑一个想法来制作一个ES-LIT插件? 还是有现成的解决方案?(具有所有可能参数的自动测试除外)


谢谢

try…catch
是情境性的-如果您只想在JSDoc中记录一个异常,并且/或者自己无法立即处理它(例如,严重错误),那么当前的方法会给您带来麻烦

此外,错误在理想情况下是自我记录的,并在代码本身中强制执行某种行为——其他一切都不是那么枯燥。代码/注释可能会不同步,您最好忘记记录@throws{Error}

所以我不确定IDE或ES lint插件是否是个好主意。相反,您可以创建某种类型的
数据类型,强制所有可能抛出函数(
a
)的使用者在某个时候对错误做出反应,否则他们将无法获得返回值。一个简化的例子:

//包装一个riscy抛出函数,使其返回一个普通值(“purify it”)
const tryCatch=(myRiskyFn)=>{
试一试{
返回{val:myRiskyFn()};
}捕获(e){
返回{err:e};
}
}
//在这里强制客户端处理错误分支,这样我们就可以返回定义良好的值。
const valuefromOrther=(Orther,onError)=>
这两种说法都是“错误”吗?onError(任择.err):任择.val;
//测试错误案例:
常量a=()=>{抛出新错误(“某些错误…”);};
常数1=tryCatch(a);//内部抛出
const result1=valuefromtor(either1,err=>`Oh my!${err}`);
console.log(result1);//天哪!错误:一些错误。。。
//测试成功案例:
常数b=()=>42;
常数2=tryCatch(b);//通过
const result2=valuefromtor(either2,err=>`Oh my!${err}`);

console.log(`yay!${result2}`);//耶!42
如果您希望下一个更高的调用方执行此操作,您可能不希望在
try..catch中包装某些内容。强迫你一直使用
try..catch
会适得其反。如果调用层次结构中的某些内容能够捕获异常,那就太好了,但是Javascript的动态特性使它几乎不可能确保静态分析器发生这种情况。@deceze,这是真的,但在这种情况下,您可以使用另一个JSDoc注释(或其他方式)转发该抛出。最接近的类比是JAVA中的“throws..”。这个概念只是一个想法,一切都可能不同。我只是想知道是否有任何类似的方法。我认为这是对你问题的一个很好的回答:对于这个案例,另一种数据类型看起来是个好主意。在这种情况下,这正是TS的工作。这很有帮助,谢谢!