wake-up-neo.com

Der Name "required" kann nach dem Upgrade auf Angular4 nicht gefunden werden

Ich möchte Chart.js in meinem Angular-Projekt verwenden. In früheren Angular2-Versionen habe ich dies gut gemacht, indem ich 'chart.loader.ts' verwendet habe, das Folgendes aufweist:

export const { Chart } = require('chart.js');

Dann im Komponentencode ich gerade

import { Chart } from './chart.loader';

Aber nach dem Upgrade auf cli 1.0.0 und Angular 4 bekomme ich die Fehlermeldung: "Kann den Namen 'required' nicht finden".

Um den Fehler zu reproduzieren:

ng new newapp
cd newapp
npm install chart.js --save
echo "export const { Chart } = require('chart.js');" >> src/app/chart.loader.ts
ng serve

In meiner 'tsconfig.json' habe ich

"typeRoots": [
  "node_modules/@types"
],

Und in 'node_modules/@types/node/index.d.ts' gibt es:

declare var require: NodeRequire;

Also bin ich verwirrt.

Übrigens stoße ich ständig auf die Warnung: 

[tslint] The selector of the component "OverviewComponent" should have prefix "app"(component-selector)

Ich habe zwar das "Präfix": "" in meinem '.angular-cli.json' gesetzt. Könnte es die Ursache sein, weil von 'angle-cli.json' zu '.angular-cli.json' gewechselt wurde?

93
Thomas Wang

Das Problem (wie in TypeScript beschrieben, der Fehler TS2304: Den Namen 'required' nicht finden kann) ist, dass die Typdefinitionen für den Knoten nicht installiert sind.

Bei einem projizierten generierten with @angular/cli 1.x sollten die spezifischen Schritte wie folgt lauten:

Schritt 1

Installieren Sie @types/node mit einer der folgenden Möglichkeiten:

- npm install --save @types/node
- yarn add @types/node -D

Schritt 2: Bearbeiten Sie Ihre Datei src/tsconfig.app.json und fügen Sie Folgendes anstelle des leeren "types": [] hinzu, der bereits vorhanden sein sollte:

...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...

Wenn ich etwas verpasst habe, schreibe einen Kommentar und ich bearbeite meine Antwort.

174
IndyWill

Zum Schluss habe ich eine Lösung dafür bekommen, meine App-Modul-Datei überprüfen:

import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MaterialModule } from '@angular/material';
import 'hammerjs';
import { ChartModule } from 'angular2-highcharts';
import * as highcharts from 'highcharts';
import { HighchartsStatic } from 'angular2-highcharts/dist/HighchartsService';

import { AppRouting } from './app.routing';
import { AppComponent } from './app.component';

declare var require: any;


export function highchartsFactory() {
      const hc = require('highcharts');
      const dd = require('highcharts/modules/drilldown');
      dd(hc);

      return hc;
}

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AppRouting,
    BrowserAnimationsModule,
    MaterialModule,
    ChartModule
  ],
  providers: [{
      provide: HighchartsStatic,
      useFactory: highchartsFactory
    }],
  bootstrap: [AppComponent]
})
export class AppModule { }

Beachten Sie declare var require: any; im obigen Code.

17
GsMalhotra

Die Antwort ist immer noch nicht sicher, aber eine mögliche Lösung ist möglich

import * as Chart from 'chart.js';
12
Thomas Wang

Bei VSCode und Angular 5 musste ich den Typen in tsconfig.app.json nur "node" hinzufügen. Speichern und Server neu starten.

{
    "compilerOptions": {
    ..
    "types": [
      "node"
    ]
  }
  ..
}

Eine merkwürdige Sache ist, dass dieses Problem nicht gefunden werden kann (tritt nicht auf, wenn man es mit ts-node tut

8
Val Martinez

Ich fügte hinzu 

"types": [ 
   "node"
]

in meiner tsconfig datei und deren funktionierte für mich tsconfig.json datei aussehen

  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": [ 
      "node",
      "underscore"
    ]
  },  
2
Nizam Khan

Ich habe die tsconfig.json-Datei in einen neuen Ordner verschoben, um mein Projekt umzustrukturieren.

Daher konnte der Pfad zum Ordner node_modules/@ types in der typeRoots-Eigenschaft von tsconfig.json nicht aufgelöst werden

Also einfach den Pfad aus aktualisieren 

"typeRoots": [
  "../node_modules/@types"
]

zu

"typeRoots": [
  "../../node_modules/@types"
]

Um sicherzustellen, dass der Pfad zu node_modules vom neuen Speicherort der Datei tsconfig.json aufgelöst wird

1
Mahesh

Fügen Sie die folgende Zeile oben in die Datei ein, in der der Fehler angezeigt wird:

declare var require: any
0
Vardan Nadkarni

Ich war mit dem gleichen Problem konfrontiert, fügte ich hinzu 

"types": ["node"]

zu tsconfig.json des Stammverzeichnisses.

Es gab einen weiteren Ordner tsconfig.app.json im Ordner src, den ich durch Hinzufügen gelöst habe 

"types": ["node"]

in die Datei tsconfig.app.json unter compilerOptions

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": ["node"]  ----------------------< added node to the array
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}
0
Sunil Garg