【问题标题】:Angular error - Generic type 'ModuleWithProviders<T>' requires 1 type argument(s)角度错误 - 通用类型“ModuleWithProviders<T>”需要 1 个类型参数
【发布时间】:2020-10-26 12:29:42
【问题描述】:

从 Angular 8 升级到 10 之后。

运行 -ng serve 命令给我错误 -

node_modules/ngx-tree-select/src/module.d.ts:11:56 中的错误 - 错误 TS2314:通用类型“ModuleWithProviders”需要 1 个类型参数。

11 static forRoot(options: TreeSelectDefaultOptions): ModuleWithProviders; ~~~~~~~~~~~~~~~~~~~

这是我的文件 - 前端/webapp/node_modules/ngx-tree-select/src/module.d.ts

import { ModuleWithProviders } from '@angular/core';
import { TreeSelectDefaultOptions } from './models/tree-select-default-options';
import * as ɵngcc0 from '@angular/core';
import * as ɵngcc1 from './components/tree-select.component';
import * as ɵngcc2 from './components/tree-select-item.component';
import * as ɵngcc3 from './directives/off-click.directive';
import * as ɵngcc4 from './pipes/item.pipe';
import * as ɵngcc5 from '@angular/common';
import * as ɵngcc6 from '@angular/forms';
export declare class NgxTreeSelectModule {
    static forRoot(options: TreeSelectDefaultOptions): ModuleWithProviders;
    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<NgxTreeSelectModule, [typeof ɵngcc1.TreeSelectComponent, typeof ɵngcc2.TreeSelectItemComponent, typeof ɵngcc3.OffClickDirective, typeof ɵngcc4.ItemPipe], [typeof ɵngcc5.CommonModule, typeof ɵngcc6.FormsModule], [typeof ɵngcc1.TreeSelectComponent]>;
    static ɵinj: ɵngcc0.ɵɵInjectorDef<NgxTreeSelectModule>;
}

//# sourceMappingURL=module.d.ts.map

请查看错误图片。

【问题讨论】:

  • 你解决了这个问题吗?从 9 升级到 10 后面临同样的问题
  • 我在这个问题上没有任何解决方案。每当我运行 ng server 时,我都会收到很多与 ngx-tree-select @MuhmmadAbubakarIkram 相关的错误
  • 我知道 ngx-bootstrap 现在与 angular 10 不兼容,6.0.0 版本的 ngx-bootstrap 将与 angular 10 兼容,请参阅此线程以获取有关该问题的更多详细信息,我到目前为止,使用 github github.com/valor-software/ngx-bootstrap/issues/… 上的此评论中提供的建议解决了该问题

标签: angular


【解决方案1】:

@user9882419 有我认为最好的方法。这是一个例子来说明他在说什么

export class AppSharedModule {
  static forRoot(): ModuleWithProviders<AppSharedModule> {
    return {
      ngModule: AppSharedModule
    };
  }
}

【讨论】:

  • 这是自己的代码;当问题出在图书馆时,@Dmitri 的方法将起作用
【解决方案2】:

要跳过这种类型的错误,只需添加您的代码:

declare module "@angular/core" {
    interface ModuleWithProviders<T = any> {
        ngModule: Type<T>;
        providers?: Provider[];
    }
}

注意:这将修复类型检查并允许继续 - 如果您发现其他库与 Angular10 不兼容 - 您需要询问库升级或找到另一个库。

【讨论】:

  • 在 Angular 应用程序中添加上述代码的位置
  • 更简单直接的就是简单提供类型,例如
  • @ankitkothari - 您需要在加载过时的库之前加载它,例如在 polifills.ts 中。为此目的,我有 helper.types.d.ts 文件来保存这些东西。
  • @ChrisOdney Angular10 的重大变化之一 - 这个接口符号从接口 ModuleWithProviders{} 更改为接口 ModuleWithProviders {} github.com/angular/angular/blob/master/goldens/public-api/core/… 我的解决方法是让它兼容,即我定义了一个T 的默认值为 ANY。
  • 谢谢 - 确认将此块添加为 polyfills.ts 的最后一个条目,就在“APPLICATION IMPORTS”注释下方,效果很好
【解决方案3】:

在我的 Angular 10.1.3 版本中解决相同错误的方法是将 export 的参数更改为 .

有错误:

export const appRoutingProviders: any[] = [];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);

改动后:

export const appRoutingProviders: any[] = [];
export const routing: ModuleWithProviders<any> = RouterModule.forRoot(appRoutes);

【讨论】:

    【解决方案4】:

    将此代码添加到您的tsconfig.app.json "skipLibCheck": true,

    【讨论】:

    • 这将使当前的警告或错误静音,但是如果库已过时并且有新的更新,以及 cli 实际上想说的是什么:更新我。
    【解决方案5】:

    你只需要在 ModuleWithProviders 之间指定类型(模块类的名称)

    【讨论】:

      【解决方案6】:

      其中一个原因是将 Angular 升级到较新的版本(即 v10),但有一个较旧的 JS 库不能很好地运行并且还需要更新。就我而言,我收到了类似 OP 的以下错误:

      [at-loader] 中的错误 ./node_modules/@ng-bootstrap/ng-bootstrap/popover/popover.module.d.ts:6:23 TS2314:通用类型“ModuleWithProviders”需要 1 个类型参数。

      请注意,在我的实例中,调用了特定的违规库 @ng-bootstrap 它确实是在一个更旧的版本上:

      "@ng-bootstrap/ng-bootstrap": "^2.0.0"

      我能够将包更新到版本7.0.0,错误消失了,应用程序构建成功。这里的主要解决方案是不要立即抛出此处推荐的修复程序或使用&lt;any&gt; 代替类型。您可能只需要更新另一个包,以使您的应用与用于正确解决问题的 Angular 版本兼容。

      【讨论】:

        【解决方案7】:

        这个ngx-tree-select 库似乎没有随着最新的 Angular 版本发展。也许您应该在 repo 上打开 PR 请求或问题。

        【讨论】:

        【解决方案8】:

        只需提供“未知”作为类型参数。 我有同样的问题,我在下面的 sn-p 中解决了它

        export const routingModule: ModuleWithProviders<unknown> = RouterModule.forRoot(
          routes
        );
        

        【讨论】:

        • 我可以知道我在哪里可以添加这个吗?
        【解决方案9】:

        由于您在节点模块中遇到错误,因此您修复的范围有限。因此,请尝试获取与 angular(您的版本)兼容的最新版本。

        【讨论】:

          【解决方案10】:

          我有很多错误。我必须一一浏览它们并将软件包更新到发布者已经修复此问题的更高版本。查看文件名,它会给你一个线索,哪些包需要更新。至少其中一个软件包没有当前更新,并且有大量积压的问题和拉取请求。我不知道我会怎么处理那个。我可能要么必须用其他东西替换那个包,要么在这里使用其中一种解决方案。

          【讨论】:

            【解决方案11】:

            如果您在 toastr.module.ts 中遇到问题

            之前:-

            export declare class ToastrModule {
                static forRoot(config?: Partial<GlobalConfig>): ModuleWithProviders;
            }
            export declare class ToastrComponentlessModule {
                static forRoot(config?: Partial<GlobalConfig>): ModuleWithProviders;
            }
            

            之后:-

            export declare class ToastrModule {
                static forRoot(config?: Partial<GlobalConfig>): ModuleWithProviders<any>;
            }
            export declare class ToastrComponentlessModule {
                static forRoot(config?: Partial<GlobalConfig>): ModuleWithProviders<any>;
            }
            

            【讨论】:

              猜你喜欢
              • 2020-12-06
              • 2020-11-19
              • 2021-04-19
              • 2018-12-08
              • 2020-11-14
              • 2017-02-08
              • 2017-06-05
              • 2017-10-23
              • 2017-12-05
              相关资源
              最近更新 更多