15
votes

Erreur angulaire - Le type générique 'ModuleWithProviders <T>' nécessite 1 argument (s) de type

Après la mise à niveau de la version Angular 8 vers 10.

L'exécution de la commande - ng serve me donne une erreur -

ERREUR dans node_modules / ngx-tree-select / src / module.d.ts: 11: 56 - erreur TS2314: le type générique 'ModuleWithProviders' nécessite 1 argument (s) de type.

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

Ceci est mon fichier - fronent / 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

Veuillez voir l'image de l'erreur.


3 commentaires

avez-vous résolu le problème? face au même problème après la mise à niveau de 9 à 10


Je n'ai pas de solution à ce problème. Chaque fois que j'exécute le serveur ng, j'obtiens beaucoup d'erreurs liées à ngx-tree-select @MuhmmadAbubakarIkram


J'ai appris que ngx-bootstrap n'est pas compatible avec angular 10 pour le moment, la version 6.0.0 de ngx-bootstrap sera compatible avec angular 10 voir ce fil pour plus de détails sur le problème, j'ai résolu le problème jusqu'à présent en utilisant la suggestion fournie dans ce commentaire sur github github.com/valor-software/ngx-bootstrap/issues/...


7 Réponses :


0
votes

Il semble que cette bibliothèque ngx-tree-select n'ait pas évolué avec les dernières versions Angular. Vous devriez peut-être ouvrir une demande de RP ou un problème sur le repo.


1 commentaires

Oui vous avez raison @Thierry Falvo, la demande de relations publiques est soulevée - github.com/Crazyht/ngx-tree-select/issues/193



11
votes

Pour ignorer cette erreur de type, ajoutez simplement votre code:

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

Remarque: cela corrigera la vérification de type et permettra de continuer - si vous remarquez d'autres inconvénients de lib à Angular10 - vous devez demander la mise à jour de la lib ou en trouver une autre.


7 commentaires

où ajouter le morceau de code ci-dessus dans une application angulaire


plus simple et plus direct consiste simplement à fournir le type, par exemple


@ankitkothari - vous devez le charger avant que votre bibliothèque obsolète ne soit chargée, par exemple dans le polifills.ts. J'ai à cet effet un fichier helper.types.d.ts où je garde ce genre de choses.


@ckapilla - mon correctif est pour les bibliothèques tierces où vous ne pouvez pas et ne voulez pas faire de correctif.


@Dmitry - oh je vois - c'était arrivé dans mon propre code alors je pensais dans ce contexte


Cela a fonctionné pour moi. @Dmitry pouvez-vous s'il vous plaît expliquer pourquoi cela fonctionne aussi un peu plus clair sur pourquoi cette erreur se produit? Merci!


@ChrisOdney L'un des changements de rupture dans Angular10 - cette interface est passée de l'interface ModuleWithProviders {} à l'interface ModuleWithProviders <T> {} github.com/angular/angular/blob/master/goldens/public-api/co‌ re / … Mon correctif est de le rendre compartimentable, c'est-à-dire que je définis une valeur par défaut pour T comme ANY.



4
votes

Il vous suffit de spécifier le type (le nom de la classe du module) entre ModuleWithProviders


0 commentaires

14
votes

@ user9882419 a la meilleure approche que je crois. Voici un exemple pour illustrer ce qu'il dit

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


1 commentaires

c'est pour son propre code; L'approche de @ Dmitri fonctionnera lorsque le problème se trouve dans une bibliothèque



3
votes

La solution pour la même erreur dans ma version Angular 10.1.3 était de changer le paramètre d'exportation en.

Avec erreur:

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

Après le changement:

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


0 commentaires

1
votes

Une des causes de ceci est la mise à niveau d'Angular vers une version plus récente (c.-à-d. V10), tout en ayant une ancienne bibliothèque JS qui ne joue pas bien et doit également être mise à jour. Dans mon cas, j'ai reçu l'erreur suivante comme l'OP:

ERREUR dans [at-loader] ./node_modules/ @ ng-bootstrap / ng-bootstrap /popover/popover.module.d.ts:6:23 TS2314: Le type générique 'ModuleWithProviders' nécessite 1 argument (s) de type.

Remarquez que dans mon cas, la bibliothèque incriminée particulière a été appelée, qui était @ng-bootstrap s'agissait en effet d'une version beaucoup plus ancienne:

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

J'ai pu mettre à jour le package vers la version 7.0.0 et l'erreur a disparu et l'application a été créée avec succès. La solution principale ici est de ne pas ajouter immédiatement les correctifs recommandés ici ou d'utiliser <any> à la place d'un type. Vous devrez peut-être simplement mettre à jour un autre package pour que votre application soit compatible avec la version d'Angular utilisée pour résoudre correctement le problème.


0 commentaires

0
votes

Fournissez simplement "inconnu" comme argument de type. J'ai eu le même problème et je l'ai résolu comme dans l'extrait suivant

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


0 commentaires