Aufwärmen · Aufgabe 1 von 7
// B1.3 · ca. 30 Min. · Einstieg
Eine erste tsconfig.json (strict als Standard)
Nach dieser Lektion schreiben Sie eine kleine tsconfig.json, wissen, was strict prüft, wählen die Dateien, die tsc prüft, und erklären jede Option der Kurs-tsconfig.
Danach können Sie
- Eine minimale tsconfig.json schreiben und sagen, was das standardmäßig eingeschaltete strict prüft
- Mit include, exclude und noEmit festlegen, welche Dateien tsc prüft und ob es JavaScript schreibt
- Die Optionen der Kurs-tsconfig erklären und tsc so starten, dass es die tsconfig verwendet
Vorhersagen · Aufgabe 2 von 7
Sagen Sie es vorher. main.ts enthält function greet(name) { return "Hello, " + name; } und einen Aufruf. Daneben liegt diese tsconfig.json, in der nichts steht. Was meldet npx tsc?
{}Üben · Aufgabe 3 von 7
Ergänzen Sie die Option, mit der tsc nur prüft und keine JavaScript-Dateien schreibt.
{ "compilerOptions": { "____": true } }"": trueÜben · Aufgabe 4 von 7
Im Ordner liegen tsconfig.json und main.ts nebeneinander, sonst nichts. Was meldet npx tsc?
{ "compilerOptions": {"noEmit": true}, "include": ["src/**/*.ts"] }Üben · Aufgabe 5 von 7
Ordnen Sie jeder Option der Kurs-tsconfig zu, was sie bewirkt.
Denksport · Aufgabe 6 von 7
Knobelaufgabe. Der Kursordner enthält main.ts und die tsconfig.json des Kurses. Um nur diese eine Datei zu prüfen, führen Sie npx tsc main.ts aus. Was passiert?
Anwenden · Aufgabe 7 von 7
Kleine Aufgabe auf Ihrem Rechner (TypeScript installiert wie in der letzten Lektion). Legen Sie in einem neuen Ordner main.ts in einen Ordner src und schreiben Sie Ihre eigene tsconfig.json: strict an, noEmit an und include nur "src/**/*.ts". Führen Sie npx tsc --showConfig aus, um die Einstellungen zu sehen, die tsc verwendet, dann npx tsc. Entfernen Sie noEmit, starten Sie npx tsc erneut und suchen Sie die neue Datei. Führen Sie zuletzt npx tsc src/main.ts aus und lesen Sie den Fehler.
Prüfen Sie Ihr Ergebnis anhand dieser Liste
Selbst programmieren
Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.
Ausgearbeitetes Beispiel
Was strict findet, und wie der Code damit umgeht
In der Kurs-tsconfig ist strict an; tsc weiß also, dass find undefined liefert, wenn nichts passt. Jede Stelle, die das Ergebnis verwendet, behandelt diesen Fall mit ??, das für undefined einen Ersatzwert liefert. Führen Sie npx tsc aus: keine Fehler. Dann node main.ts. Ändern Sie nun die letzte Zeile zu found.length und starten Sie npx tsc erneut: error TS18048: 'found' is possibly 'undefined'.
main.ts
// strict is on, so tsc knows that find() may return undefined.
const names: string[] = ["Ada", "Grace", "Linus"];
const found = names.find((name) => name.startsWith("G"));
const missing = names.find((name) => name.startsWith("Z"));
console.log("found:", found ?? "nobody");
console.log("missing:", missing ?? "nobody");
console.log("letters:", (found ?? "").length);
Ausführen mit
npx tsc
node main.tsAusgabe
found: Grace
missing: nobody
letters: 5- find liefert den ersten Treffer oder undefined, wenn es keinen gibt, wie missing zeigt.
- Mit strictNullChecks, einem Teil von strict, verlangt tsc, dass Sie undefined behandeln, bevor Sie den Wert verwenden.
- wert ?? ersatz liefert den Ersatz nur, wenn wert undefined oder null ist.
- Mit "strict": false bestünde missing.length die Prüfung, und node main.ts stürzte dann ab, weil missing undefined ist.
Ändern und ausführen
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser den TypeScript-Compiler herunter (bis zu 2.1 MB) und speichert ihn im Cache. Ihr Code bleibt auf Ihrem Gerät.
Übungen
Übung 1 von 2
Den Fall behandeln, den find() nicht abdeckt
firstLong soll das erste Wort mit mehr als fünf Buchstaben in Großbuchstaben liefern, oder "" (leeren Text), wenn es keines gibt. strict ist an, und tsc meldet, dass found möglicherweise undefined ist; bei einer Liste ohne langes Wort stürzt die Funktion außerdem ab. Behandeln Sie den Fall undefined in der return-Zeile.
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser den TypeScript-Compiler herunter (bis zu 2.1 MB) und speichert ihn im Cache. Ihr Code bleibt auf Ihrem Gerät.
Hinweise
Hinweis 1
tsc meldet main.ts(3,10): error TS18048: 'found' is possibly 'undefined'. Das ist strictNullChecks, ein Teil von strict.
Hinweis 2
find liefert undefined, wenn kein Wort passt, und undefined hat kein toUpperCase.
Hinweis 3
Geben Sie zuerst einen Ersatzwert an: return (found ?? "").toUpperCase();
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
export function firstLong(words: string[]): string {
const found = words.find((word) => word.length > 5);
return (found ?? "").toUpperCase();
}
Auf dem eigenen Computer ausführen
Installieren Sie TypeScript 7.0 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.
main.ts
export function firstLong(words: string[]): string {
const found = words.find((word) => word.length > 5);
return found.toUpperCase();
}
main.test.ts
import {test} from 'node:test';
import assert from 'node:assert/strict';
import {firstLong} from './main.ts';
test('findet das erste lange Wort', () => {
assert.equal(firstLong(['go', 'typescript', 'javascript']), 'TYPESCRIPT', 'firstLong(["go", "typescript", "javascript"]) sollte "TYPESCRIPT" sein');
});
test('liefert leeren Text, wenn kein Wort lang ist', () => {
assert.equal(firstLong(['go', 'ts']), '', 'firstLong(["go", "ts"]) sollte "" sein');
});
package.json
{
"type": "module"
}
tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "nodenext",
"lib": [
"esnext",
"dom"
],
"types": [],
"strict": true,
"noEmit": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"allowImportingTsExtensions": true
},
"include": [
"**/*.ts"
],
"exclude": [
"**/*.test.ts"
]
}
npx tsc braucht TypeScript im Ordner: Führen Sie dort einmal npm install --save-dev typescript aus. tsc prüft die Typen; Node.js führt main.ts aus, indem es sie entfernt.
Programm ausführen:
npx tsc
node main.tsPrüfungen ausführen (learnrun.js muss im selben Ordner liegen):
npx tsc
node --testlearnrun.js herunterladenÜbung 2 von 2
Den Standardwert von strict anwenden
strictIsOn bekommt den Wert von "strict" aus einer tsconfig: true, false oder gar nichts, wenn die Option fehlt (setting?: bedeutet, dass der Aufrufer ihn weglassen darf; dann ist er undefined). Die Funktion soll liefern, ob strict an ist, und weggelassen heißt: der Standardwert true. tsc lehnt die return-Zeile ab. Korrigieren Sie sie.
Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.
Beim ersten Ausführen lädt Ihr Browser den TypeScript-Compiler herunter (bis zu 2.1 MB) und speichert ihn im Cache. Ihr Code bleibt auf Ihrem Gerät.
Hinweise
Hinweis 1
tsc meldet main.ts(3,3): error TS2322: Type 'boolean | undefined' is not assignable to type 'boolean'. setting kann undefined sein, und die Funktion verspricht einen boolean.
Hinweis 2
Wenn setting undefined ist, liefern Sie den Standardwert von strict in TypeScript 7.0.
Hinweis 3
return setting ?? true; lässt false als false stehen, denn ?? ersetzt nur undefined und null.
Eine Lösung zeigen
Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.
// The value of "strict" in a tsconfig: true, false, or left out (undefined).
export function strictIsOn(setting?: boolean): boolean {
return setting ?? true;
}
Auf dem eigenen Computer ausführen
Installieren Sie TypeScript 7.0 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.
main.ts
// The value of "strict" in a tsconfig: true, false, or left out (undefined).
export function strictIsOn(setting?: boolean): boolean {
return setting;
}
main.test.ts
import {test} from 'node:test';
import assert from 'node:assert/strict';
import {strictIsOn} from './main.ts';
test('weggelassen heißt Standardwert: an', () => {
assert.equal(strictIsOn(), true, 'strictIsOn() sollte true sein');
});
test('true heißt an', () => {
assert.equal(strictIsOn(true), true, 'strictIsOn(true) sollte true sein');
});
test('false heißt aus', () => {
assert.equal(strictIsOn(false), false, 'strictIsOn(false) sollte false sein');
});
package.json
{
"type": "module"
}
tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "nodenext",
"lib": [
"esnext",
"dom"
],
"types": [],
"strict": true,
"noEmit": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"allowImportingTsExtensions": true
},
"include": [
"**/*.ts"
],
"exclude": [
"**/*.test.ts"
]
}
npx tsc braucht TypeScript im Ordner: Führen Sie dort einmal npm install --save-dev typescript aus. tsc prüft die Typen; Node.js führt main.ts aus, indem es sie entfernt.
Programm ausführen:
npx tsc
node main.tsPrüfungen ausführen (learnrun.js muss im selben Ordner liegen):
npx tsc
node --testlearnrun.js herunterladenHäufige Fehler
Einen Wert verwenden, der undefined sein kann
const names = ["Ada", "Grace"];
const found = names.find((name) => name.startsWith("G"));
console.log(found.toUpperCase());
Was tsc oder Node.js ausgibt
main.ts(3,13): error TS18048: 'found' is possibly 'undefined'.Warum, und die Lösung
find liefert undefined, wenn nichts passt, und strictNullChecks, ein Teil von strict, erlaubt keinen Methodenaufruf auf einem Wert, der undefined sein kann. Hier passt zwar ein Name, aber tsc prüft jeden Fall, nicht diesen einen Lauf. Behandeln Sie den Fall: (found ?? "").toUpperCase(). strict auszuschalten brächte tsc zum Schweigen, und das Programm stürzte ab, sobald nichts passt.
Ein enum, das Node.js nicht entfernen kann
enum Size {
Small,
Large
}
console.log(Size.Large);
Was tsc oder Node.js ausgibt
main.ts(1,6): error TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled.Warum, und die Lösung
Ein enum ist TypeScript-Syntax, die zur Laufzeit Code erzeugt; Node.js kann es also nicht durch Entfernen der Typen ausführen: Auch node main.ts bricht mit einem Fehler ab. Die Kurs-tsconfig setzt erasableSyntaxOnly, also meldet tsc es zuerst. Verwenden Sie stattdessen einfache Werte, etwa const Size = {Small: 0, Large: 1};.
Nodes process ohne seine Typen verwenden
console.log("arguments:", process.argv.length);
Was tsc oder Node.js ausgibt
main.ts(1,27): error TS2591: Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.Warum, und die Lösung
process gehört zu Node.js, und seine Deklarationen kommen aus dem Paket @types/node. Die Kurs-tsconfig setzt "types": [], also wird kein solches Paket geladen (das braucht Node.js; führen Sie es lokal aus). Wie die Meldung sagt, installiert ein Node-Projekt @types/node und trägt "node" in types ein. Der Kurs bleibt bis zu späteren Modulen bei Programmen ohne Nodes eigene APIs.
TypeScript im Browser: der Compiler von TypeScript 6.0.3, Apache-2.0, danach die eigene Engine Ihres Browsers. Lizenz und Quellcode
Abschlussquiz
5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.
Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.