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
7 Réponses :
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.
Oui vous avez raison @Thierry Falvo, la demande de relations publiques est soulevée - github.com/Crazyht/ngx-tree-select/issues/193
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.
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.
Il vous suffit de spécifier le type (le nom de la classe du module) entre ModuleWithProviders
@ 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
};
}
}
c'est pour son propre code; L'approche de @ Dmitri fonctionnera lorsque le problème se trouve dans une bibliothèque
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);
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.
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 );
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/...