Hier lernen wir, wie man eine hochwertige Typescript-Deklarationsdatei schreibt. Sie programmieren also in ReactJS und möchten eine SVG-Datei importieren, aber Ihre IDE/tsc beschwert sich.
[ts] cannot find module './logo.svg'
Jetzt ist es an der Zeit, sich für eine schnelle Copy-Paste-Lösung an Stackoverflow zu wenden.
Aber lassen Sie uns einen Moment warten und versuchen, diese Dateien und ihre Wirkung für uns zu verstehen.
In TS/JS hatten wir viele Ansätze zur Modularisierung unserer in TS/JS geschriebenen Apps. Derzeit herrscht ESM (auch bekannt als ES-Module, ES6-Module) an erster Stelle. Wir kennen sie normalerweise mit ihrer Syntax:
Um die ursprüngliche Frage zu beantworten, gilt in TS/JS in Übereinstimmung mit ECMAScript 2015 jede Datei, die einen Top-Level-Import oder -Export enthält, als Modul.
Und wenn man keinen Import oder Export auf oberster Ebene hat:
Keine globale Namensraumverschmutzung mehr. Dies impliziert Folgendes:
Im TS-Modul ist Auflösung der Prozess, bei dem eine Zeichenfolge aus der Import- oder Require-Anweisung entnommen und ermittelt wird, auf welche Datei sich diese Zeichenfolge bezieht.
Bei TS haben wir zwei Strategien:
Übrigens gibt es unzählige Stellen, an denen wir es absichtlich oder unabsichtlich ändern könnten (moduleResolution, baseUrl, paths, rootDirs).
Wenn Sie beispielsweise Ihre App für die Verwendung von ESM erstellen (die kompilierte Version verwendet ESM), müssen Sie in Ihrem CompilerOptions.module „NodeNext“ auswählen.
Hinweis: Wenn sich in diesem Verzeichnis eine package.json befindet. Dann verwendet TS seine Haupt- und Typen, um seine Typen zu erfassen.
Erfahren Sie hier mehr.
Grundsätzlich ordnet es Importe also dem Suchort*s* relativ zur baseUrl zu, sofern diese festgelegt ist, andernfalls zur tsconfig-Datei. Der häufigste Anwendungsfall hierfür sind Pfadaliase:
[ts] cannot find module './logo.svg'
Vorsicht
Für die Laufzeit bedeutet das nichts. Das heißt, Ihr lieber Bundler oder Compiler muss sich darum kümmern, sie richtig zu bündeln. Und wenn Ihr Pfad auf einen Ort verweist, der nicht existiert, stürzt Ihre App ab, wenn sie von NodeJS ausgeführt wird.
Tipp
Stattdessen können Sie die Importe von package.json (auch Subpath-Importe genannt) verwenden.
Um die ausgegebene JS-Ausgabe zu beeinflussen, können wir Folgendes ändern:
Wir möchten also eine .graphql-Datei oder eine andere Erweiterung importieren, von der TS keine Ahnung hat, wie sie aussieht (ihre Typen können nicht aufgelöst werden). Jetzt weiß TS also, wie eine importierte SVG-, GraphQL- oder andere Datei aussehen wird.
ref.
Nackter Bezeichner: ein Modulname in einer Importanweisung, der KEIN ein relativer oder absoluter Pfad ist. Dies sind typischerweise Namen von Paketen in den node_modules Ihres Projekts oder anderen konfigurierten Speicherorten. ↩
Das obige ist der detaillierte Inhalt vonModuldeklaration im TS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!