【问题标题】:Surround super() with try-catch in typescript在 typescript 中使用 try-catch 包围 super()
【发布时间】: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


【解决方案1】:

问题在于在构造函数调用之前初始化某些类属性。我班上有这样的事情:

protected myVar: number = 5;
constructor() {
    try {
        super();
    }
    catch(e) {
        console.log("some info about error");
    }
}

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2016-10-12
    • 2017-10-06
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    相关资源
    最近更新 更多