Javascript try..catch标识符的正确jsdoc类型注释是什么?

Javascript try..catch标识符的正确jsdoc类型注释是什么?,javascript,typescript,google-closure-compiler,jsdoc,Javascript,Typescript,Google Closure Compiler,Jsdoc,在用JSDoc注释注释JavaScript源代码时,如何注释try..catch标识符的类型? 试试看{ 抛出新错误(); }捕获(whatIsMyType){ console.error(whatIsMyType.message); } 我特别要求的,但一个答案,或甚至将是有见地的 我试过(打字稿): 尝试{throw new Error();}catch(/**@type{Error}*/e){/*…*/} 请尝试{throw new Error();}/**@param{Error}e*

在用JSDoc注释注释JavaScript源代码时,如何注释try..catch标识符的类型?

试试看{
抛出新错误();
}捕获(whatIsMyType){
console.error(whatIsMyType.message);
}
我特别要求的,但一个答案,或甚至将是有见地的

我试过(打字稿):

尝试{throw new Error();}catch(/**@type{Error}*/e){/*…*/}
请尝试{throw new Error();}/**@param{Error}e*/catch(e){/*…*/}
/**@param{Error}e*/try{throw new Error();}catch(e){/*…*/}
但是没有成功
e
始终键入
any
。有效的方法是

尝试{抛出新错误();}捕获(_e){
/**@type{Error}*/
var e=_e;
// ...
}
额外的变量将通过闭包编译器高级模式进行优化,但我发现从性能角度来看(在开发版本中)这很麻烦,也不是最优的,我希望有更好的方法(也就是说,我不必创建一个人工变量来注释正确的类型)

根据法律规定有效

我写的打字脚本不多,但我翻遍了一些源代码,大部分都没有看到
catch
级别的注释。我所做的少数几件事情看起来是这样的

try { throw new Error(); } catch (e: Error) {}
更新:

我认为TypeScript有权拒绝保证
检查
块的类型。您可以在
try
块中抛出任何内容(有意或无意),因此编译器无法确保捕获的类型正确。在解决方案中,您应该检查
catch
中的类型:

try {
  throw new CustomError();
}
catch (err) {
  console.log('bing');
  if (err instanceof CustomError) {
    console.log(err.aPropThatIndeedExistsInCustomError); //works
    console.log(err.aPropThatDoesNotExistInCustomError); //error as expected
  } else {
    console.log(err); // this could still happen
  }
}

功劳☝Catch子句在TypeScript中不能有类型批注。该示例是一个promise-catch处理程序,由于它是一个函数参数,因此具有不同的语义。感谢@Graham提供闭包编译器解决方案@杰克,那么用打字脚本就没有办法了?悲伤,但可以理解。。。
try {
  throw new CustomError();
}
catch (err) {
  console.log('bing');
  if (err instanceof CustomError) {
    console.log(err.aPropThatIndeedExistsInCustomError); //works
    console.log(err.aPropThatDoesNotExistInCustomError); //error as expected
  } else {
    console.log(err); // this could still happen
  }
}