我的项目中有错误,我需要使用 try , catch 和 finally 处理。我可以在JavaScript中使用它,但不能在Typescript中使用它。当我在打字稿 catch 语句中将 Exception 作为自变量时,这是不接受的?这是代码。
private handling(argument: string): string {
try {
result= this.markLibrary(argument);
}
catch(e:Exception){
result = e.Message;
}
return result;
}
我在这里需要一条异常消息,但我听不到。我收到以下错误。
Catch子句变量不能具有类型注释。
答案 0 :(得分:3)
使用TS 4.0,可以将unknown
设置为catch子句变量类型:
unknown
比any
安全,因为它提醒我们在对值进行运算之前,我们需要执行某种类型检查。 (docs)
try { /* ... */ }
catch (e: unknown) { // <-- set `e` to `unknown` here
e.message // errors
if (typeof e === "string") {
e.toUpperCase() // we now know, `e` is a string
} else if (e instanceof Error) {
e.message // works, `e` narrowed to Error
}
// ... handle other error types
}
答案 1 :(得分:1)
Typescript不支持catch变量上的注释。有一个建议可以允许这样做,但仍在讨论中(请参阅here)
您唯一的解决方案是使用类型断言或额外的变量
catch(_e){
let e:Error= _e;
result = e.message;
}
catch(e){
result = (e as Error).message;
}
不幸的是,这也可以正常工作,并且完全没有被选中:
catch(e){
result = e.MessageUps;
}
注意
正如您在提案讨论中所读到的那样,在JS中,并非所有抛出的内容都必须是Error
实例,所以请提防这一假设
也许用no-unsafe-any
的tslint可以帮助抓住这一点。
答案 2 :(得分:0)
首先,您需要定义result
变量
let result;
第二,您无法定义e的类型-如消息所述,因此,如果要强制使用e的类型,请使用
catch(e){
result = (e as Exception).Message;
}
或
catch(e){
result = (<Exception>e).Message;
}
否则,它应该仍然有效,因为e的类型将为any
catch (e) {
result = e.Message;
}