【发布时间】:2021-03-17 11:07:20
【问题描述】:
有没有办法在 typescript 中用 try-catch 包围 super() 调用?
因为在调用 super()(父构造函数)时有时会抛出错误。
当我使用自定义 HTML 元素时,当它未定义时(通过调用 customElements.define()),基本上会发生这种情况。
我想做的是捕捉那个错误
未捕获的类型错误:非法构造函数
并登录控制台信息,我忘记定义类 XYZ...
这可能吗?因为打字稿编译器给我以下错误,当我使用这个构造函数时:
constructor() {
try {
super();
}
catch(e) {
console.log("some info about error");
}
}
Typescript 编译器错误:
当类包含初始化属性、参数属性或私有标识符时,“超级”调用必须是构造函数中的第一条语句。
【问题讨论】:
-
我认为 TypeScript 在这里比绝对必要的更严格。但是,通常不可能从
super()引发的异常中恢复——this值不会被初始化。您需要在catch子句中做的是重新throw一个错误或return一个不同的对象。 -
请分享minimal reproducible example 来演示错误。我发现复制in the playground 非常困难。也就是说,您需要确保在记录后重新抛出您捕获的错误。
-
我cannot reproduce this,你能分享完整的代码吗?
-
试试这个:codepen.io/dinoq-the-reactor/pen/LYRNWrB 打开控制台 (F12),当您注释掉 customElements.define() 调用时应该会看到错误...
-
@PetrMarek 当然,但是你是怎么得到那个 TypeScript 编译错误的?
标签: javascript typescript exception try-catch super