Ich erstelle eine Knoten-App und bin in jeder Datei in .js daran gewöhnt, dies in verschiedenen Paketen zu erfordern.
let co = require("co");
Aber bekommen
usw. Mit Typoskript scheint es also nur eine solche Deklaration / Anforderung für das gesamte Projekt zu geben? Ich bin darüber verwirrt, da ich dachte, dass let
der Bereich auf die aktuelle Datei beschränkt ist.
Ich hatte gerade ein Projekt, das funktionierte, aber nach einem Refactor bekomme ich diese Fehler jetzt überall.
Kann jemand erklären?
typescript
require
dcsan
quelle
quelle
const fs = require('fs')
gibt einen ähnlichen Fehler, also nicht sicher, aus welcher Bibliothek dies importiert werden soll ...Antworten:
In Bezug auf den Fehler selbst werden lokale Variablen
let
deklariert , die in Blockbereichen anstelle von Funktionsbereichen vorhanden sind. Es ist auch strenger als , also kann man so etwas nicht machen:var
Beachten Sie auch, dass
case
Klauseln inswitch
Blöcken keine eigenen Blockbereiche erstellen, sodass Sie dieselbe lokale Variable nicht über mehrerecase
s hinweg neu deklarieren können, ohne{}
jeweils einen Block zu erstellen.Beim Import wird wahrscheinlich dieser Fehler angezeigt, da TypeScript Ihre Dateien nicht als tatsächliche Module erkennt und Definitionen auf Modellebene anscheinend globale Definitionen dafür sind.
Versuchen Sie, ein externes Modul auf die Standard- ES6- Methode zu importieren , die keine explizite Zuweisung enthält, und TypeScript sollte Ihre Dateien korrekt als Module erkennen:
Dies führt weiterhin zu einem Kompilierungsfehler, wenn Sie
co
erwartungsgemäß bereits einen Namen haben . Dies ist beispielsweise ein Fehler:Wenn Sie die Fehlermeldung "Modul co kann nicht gefunden werden" erhalten ...
TypeScript führt eine vollständige Typprüfung für Module durch. Wenn Sie also keine TS-Definitionen für das Modul haben, das Sie importieren möchten (z. B. weil es sich um ein JS-Modul ohne Definitionsdateien handelt), können Sie Ihr Modul in einer Definitionsdatei deklarieren
.d.ts
, die dies nicht tut Enthält keine Exporte auf Modulebene:quelle
typings install co
was gibtUnable to find "co" in the registry
. irgendwelche anderen Ideen?./co
anstattco
dass sich co.ts im selben Ordner befindet (oder in der kompilierten Ausgabe, co.js).Die beste Erklärung, die ich bekommen konnte, ist von Tamas Piros Post .
TLDR; TypeScript verwendet die DOM-Typisierungen für die globale Ausführungsumgebung. In Ihrem Fall gibt es eine 'co'-Eigenschaft für das globale Fensterobjekt.
Um dies zu lösen:
Bearbeiten Sie tsconfig.json im TypeScript-Projektverzeichnis.
quelle
export {}
das Problem für mich gelöst hat, aber das Hinzufügen"compilerOptions": { "lib": ["es6"] }
scheint weder während der Kompilierung noch in VSCode zu helfen.Ich habe diesen ähnlichen Fehler beim Kompilieren meiner Node.JS Typescript-Anwendung erhalten:
node_modules/@types/node/index.d.ts:83:15 - error TS2451: Cannot redeclare block-scoped variable 'custom'.
Das Update bestand darin , Folgendes zu entfernen :
und um es durch dieses zu ersetzen:
quelle
Verwendung
IIFE(Immediately Invoked Function Expression)
, IIFEquelle
const expect = chai.expect;
, um Gurkentests im Angular 5-Projekt zu verwenden).Für diejenigen, die in dieser Zeit hierher kommen, ist hier eine einfache Lösung für dieses Problem. Zumindest hat es bei mir im Backend funktioniert. Ich habe den Frontend-Code nicht überprüft.
Einfach hinzufügen:
am Anfang Ihres Codes.
Gutschrift an EUGENE MURAVITSKY
quelle
Ich habe das gleiche Problem und meine Lösung sieht folgendermaßen aus:
Jetzt können wir es auf der Serverseite verwenden:
Und auch auf der Kundenseite:
Und natürlich eine Schluckdatei für all das:
Aktualisiert. Natürlich ist es nicht notwendig, Typoskriptdateien separat zu kompilieren.
runSequence(['ts1', 'ts2', 'ts3'], 'browserify', callback)
funktioniert perfekt.quelle
Ich habe diesen Fehler beim Upgrade erhalten
gulp-typescript 3.0.2 → 3.1.0
Durch Zurücksetzen auf 3.0.2 wurde das Problem behoben
quelle