Class 更新到 Angular 10 后,如果没有 'new',则无法调用构造函数 UpgradeComponent

Class constructor UpgradeComponent cannot be invoked without 'new' after Update to Angular 10

我刚开始将一个 Angular 项目从 9.1.0 升级到 10.0.12 它仍然是一个混合应用程序,并且升级了几个组件(从 Angular JS),如 Angular docs

中所述

但是在更新到 Angular10 之后,这些升级的组件将不会加载并导致以下错误

Class constructor UpgradeComponent cannot be invoked without 'new' (at new MyUpgradedComponentDirective)

我搜索了 Changelog,没有找到任何关于 UpgradeComponent 的信息。

在无休止的搜索之后,我进入了试错模式。
我发现 @Directive 上有一个 jit 属性,如果设置为 true,上述错误就会消失。

添加 jit: true 升级后的组件代码如下所示

@Directive({
    selector: 'my-angular-selector',
    jit: true,
})
export class MyDirective extends UpgradeComponent {
    constructor(elementRef: ElementRef, injector: Injector) {
        super('angularJsDirectiveSelector', elementRef, injector);
    }
}

jit 更改为 true 可能不是最好的解决方案 - 这会将指令切换到模式,当它在浏览器运行时编译时,而不是作为 pre-compiled JS 代码。

这里描述的问题似乎可以通过将 tsconfig.json output 属性 设置为 ES2015 来解决,如果你有旧版本的话。

可以在此处找到更多详细信息:https://github.com/angular/angular-cli/issues/18067