tsconfig.jsonDieses Kapitel bietet einen Überblick darüber, wie TypeScript funktioniert: Wie ist die Struktur eines typischen TypeScript-Projekts aufgebaut? Was wird wie kompiliert? Wie können wir IDEs verwenden, um TypeScript zu schreiben?
Dies ist eine mögliche Dateistruktur für TypeScript-Projekte
typescript-project/
dist/
ts/
src/
main.ts
util.ts
test/
util_test.ts
tsconfig.json
Erläuterungen
ts/ enthält die TypeScript-Dateients/src/ enthält den eigentlichen Code.ts/test/ enthält Tests für den Code.dist/ ist der Ort, an dem die Ausgabe des Compilers gespeichert wird.ts/ zu JavaScript-Dateien in dist/. Zum Beispielts/src/main.ts wird zu dist/src/main.js kompiliert (und möglicherweise andere Dateien)tsconfig.json wird zur Konfiguration des TypeScript-Compilers verwendet.tsconfig.jsonDer Inhalt von tsconfig.json sieht wie folgt aus
{
"compilerOptions": {
"rootDir": "ts",
"outDir": "dist",
"module": "commonjs",
···
}
}Wir haben angegeben, dass
ts/.dist/.Zwei beliebte IDEs für JavaScript sind
Die Beobachtungen in diesem Abschnitt beziehen sich auf Visual Studio Code, können aber auch für andere IDEs gelten.
Eine wichtige Tatsache, die man wissen muss, ist, dass Visual Studio Code TypeScript-Quellcode auf zwei unabhängige Arten verarbeitet
tsc einen --watch-Modus, der Eingabedateien überwacht und diese bei Änderungen zu Ausgabedateien kompiliert. Infolgedessen erhalten wir, wann immer wir eine TypeScript-Datei in der IDE speichern, sofort die entsprechenden Ausgabedateien.tsc von innerhalb von Visual Studio Code ausführen. Um dies zu tun, muss es entweder innerhalb des Projekts, an dem wir gerade arbeiten, oder global (über den Node.js-Paketmanager npm) installiert sein.Ausgehend von einer TypeScript-Datei main.ts kann der TypeScript-Compiler verschiedene Arten von Artefakten erzeugen. Die gebräuchlichsten sind
main.jsmain.d.ts (enthält Typinformationen; denken Sie an eine .ts-Datei abzüglich des JavaScript-Codes)main.js.mapTypeScript wird oft nicht über .ts-Dateien, sondern über .js-Dateien und .d.ts-Dateien geliefert
Eine Source Map gibt für jeden Teil des Ausgabecodes in main.js an, welcher Teil des Eingabecodes in main.ts ihn erzeugt hat. Diese Informationen ermöglichen es unter anderem Laufzeitumgebungen, JavaScript-Code auszuführen und dabei die Zeilennummern des TypeScript-Codes in Fehlermeldungen anzuzeigen.
Das npm-Repository ist ein riesiges Repository für JavaScript-Code. Wenn wir ein JavaScript-Paket aus TypeScript verwenden möchten, benötigen wir Typinformationen dafür
.d.ts-Dateien oder sogar den vollständigen TypeScript-Code enthalten.Die Deklarationsdateien von DefinitelyTyped befinden sich im @types-Namespace. Daher müssen wir, wenn wir eine Deklarationsdatei für ein Paket wie lodash benötigen, das Paket @types/lodash installieren.
Der TypeScript-Compiler kann auch reine JavaScript-Dateien verarbeiten
Mit der Option --allowJs kopiert der TypeScript-Compiler JavaScript-Dateien aus dem Eingabeverzeichnis in das Ausgabeverzeichnis. Vorteil: Bei der Migration von JavaScript zu TypeScript können wir mit einer Mischung aus JavaScript- und TypeScript-Dateien beginnen und langsam mehr JavaScript-Dateien in TypeScript konvertieren.
Mit der Option --checkJs prüft der Compiler zusätzlich JavaScript-Dateien auf Typen (--allowJs muss dafür aktiviert sein). Dies geschieht so gut er kann, angesichts der begrenzten verfügbaren Informationen. Welche Dateien geprüft werden, kann über Kommentare innerhalb dieser Dateien konfiguriert werden
// @ts-nocheck enthält, wird sie nicht auf Typen geprüft.--checkJs kann der Kommentar // @ts-check verwendet werden, um einzelne JavaScript-Dateien auf Typen zu prüfen.Der TypeScript-Compiler verwendet statische Typinformationen, die über JSDoc-Kommentare angegeben werden (siehe unten für ein Beispiel). Wenn wir sorgfältig vorgehen, können wir reine JavaScript-Dateien vollständig statisch typisieren und sogar Deklarationsdateien daraus ableiten.
Mit der Option --noEmit erzeugt der Compiler keine Ausgabe, er prüft nur Dateien auf Typen.
Dies ist ein Beispiel für einen JSDoc-Kommentar, der statische Typinformationen für eine Funktion add() liefert
/**
* @param {number} x - The first operand
* @param {number} y - The second operand
* @returns {number} The sum of both operands
*/
function add(x, y) {
return x + y;
}Weitere Informationen: Type-Checking JavaScript Files im TypeScript Handbook.