Aufgabe 01 - TypeScript-Spickzettel
Aufgabe 01 - TypeScript-Spickzettel
Abschnitt betitelt „Aufgabe 01 - TypeScript-Spickzettel“Worum geht es?
Abschnitt betitelt „Worum geht es?“Sie richten die Werkzeugkette des Jahres ein (Node.js, npm, TypeScript) und erstellen Ihren persönlichen Spickzettel der Sprachkonstrukte: eine kompakte, selbst getestete Referenz, die Sie durch alle weiteren Übungen begleitet (siehe Kapitel JavaScript und TypeScript). Der Lerneffekt liegt im Weg dorthin: Jedes Konstrukt wird einmal selbst getippt, ausgeführt und in eigenen Worten beschrieben.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel JavaScript und TypeScript vollständig; Kapitel npm: Pakete und Projekte, Abschnitte
package.jsonund Abhängigkeiten. - Node.js (LTS), VS Code, ein Terminal.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie richten ein Node-/TypeScript-Projekt selbstständig ein und führen Code aus.
- Sie beherrschen die Grundkonstrukte und modernen Sprachmittel von JavaScript/TypeScript.
- Sie dokumentieren technisches Wissen als brauchbares Nachschlagewerk.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: Werkzeuge nach Anleitung einrichten, Konstrukte wiedergeben (Teil A).
- Reorganisation und Transfer: Konstrukte auf eigene Beispiele anwenden und strukturieren (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: ein zusammengesetztes Problem typisiert lösen und Entwurfsentscheidungen begründen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Setup und Projekt
Abschnitt betitelt „Teil A - Setup und Projekt“- Installieren Sie Node.js und prüfen Sie
node --versionundnpm --version. - Legen Sie einen Projektordner an:
npm init -y, dannnpm install --save-dev typescript tsxundnpx tsc --init. - Schreiben Sie
hello.ts(Ausgabe mit Template-Literal) und führen Sie es mitnpx tsx hello.tsaus. Kompilieren Sie es zusätzlich einmal mitnpx tscund sehen Sie sich die erzeugte.js-Datei an: Was hat der Compiler entfernt? - Sehen Sie sich die entstandene
package.jsonan und beantworten Sie schriftlich: Warum sindtypescriptundtsxunterdevDependenciesgelandet und nicht unterdependencies? Was bedeutet das Zeichen^vor der Versionsnummer? - Ergänzen Sie zwei eigene Einträge unter
scripts:"dev": "tsx hello.ts"und"typecheck": "tsc --noEmit". Prüfen Sie beide mitnpm run devundnpm run typecheck. - Legen Sie eine
.gitignoremitnode_modules/an. Beantworten Sie in je einem Satz, warum dieser Ordner nicht ins Repository gehört, diepackage-lock.jsondagegen schon. - Machen Sie die Probe aufs Exempel: Löschen Sie
node_modules/und stellen Sie den Zustand mitnpm ciwieder her. Notieren Sie, wohernpm ciweiß, welche Versionen zu installieren sind.
Teil B - Der Spickzettel
Abschnitt betitelt „Teil B - Der Spickzettel“Erstellen Sie eine Tabelle (Markdown) mit je einem selbst getesteten Mini-Beispiel für:
constundlet(und wann welches),if/else if/elseund der Vergleich mit===,for...ofüber ein Array und die klassischewhile-Schleife,- Funktionsdeklaration und Arrow Function (mit einem Satz dazu, wann Sie welche Schreibweise wählen),
- Array: anlegen,
push,length,includes, map,filterundreducean einer Zahlenliste,- Objektliteral: anlegen, Punktzugriff, Feld ergänzen,
- Template-Literal mit eingebettetem Ausdruck.
Jedes Beispiel läuft vor dem Eintragen in der Node-REPL oder per tsx. Ungeprüfte Beispiele haben auf dem Zettel nichts verloren.
Teil C - Das Neue
Abschnitt betitelt „Teil C - Das Neue“Schreiben Sie je ein lauffähiges, kommentiertes Mini-Beispiel für:
import/exportüber zwei Dateien (denken Sie an"type": "module"odertsx),- Destructuring von Objekt und Array, auch in einer Parameterliste; dazu je einmal Umbenennen (
{ filename: name }) und Standardwert ({ fps = 25 }), - Spread zum Kopieren und Zusammenführen (
{ ...object, field: value }) sowie Rest (...values) als Parameter; zeigen Sie am laufenden Beispiel, dass die Kopie flach ist: Ändern Sie in der Kopie ein verschachteltes Array und beobachten Sie das Original, ?.und??, inklusive eines Falls, in dem||das Falsche täte (0als gültiger Wert!),- ein
interface Clip(Dateiname, Dauer in Sekunden, optionale fps) und eine Funktion, die nur dieses Interface akzeptiert; zeigen Sie mit einem absichtlichen Tippfehler im Feldnamen, wie der Compiler reagiert.
Teil D - Expertenteil: typisierte Auswertung
Abschnitt betitelt „Teil D - Expertenteil: typisierte Auswertung“- Erweitern Sie das Interface
Clipumtags: string[]und schreiben SielongestPerTag(clips: Clip[]): Map<string, Clip>: je Tag der längste Clip. - Definieren Sie
type ClipState = "raw" | "editing" | "approved", erweitern SieClipdarum und schreiben SiecountByState(clips: Clip[]): Record<ClipState, number>. Beobachten Sie, wie der Compiler auf einen vergessenen Zustand im Ergebnisobjekt reagiert. - Lösen Sie eine der beiden Funktionen einmal mit Schleife und einmal mit
map/filter/reduce; vergleichen Sie beide Fassungen in zwei Sätzen. - Begründen Sie in drei Sätzen, welche Prüfungen aus Punkt 1 und 2 TypeScript zur Compile-Zeit übernimmt und was ohne Typen erst zur Laufzeit (oder nie) aufgefallen wäre.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Was ist der Unterschied zwischen
==und===, und warum ist nur eines davon erlaubt? - Wann liefert
value ?? "x"etwas anderes alsvalue || "x"? - Was gehört von
node_modules/,package.jsonundpackage-lock.jsonins Repository, und warum? - Was unterscheidet
npm installvonnpm ci, und wofür ist welcher Befehl gedacht? - Was prüft TypeScript beim Kompilieren, was bleibt Laufzeitverhalten?
- Was bedeutet der Fehler
Property 'durationSeconds' is missing in type ...?
Projektordner als Git-Repository (mit .gitignore), Spickzettel als cheatsheet.md, die Beispieldateien aus Teil C und gegebenenfalls Teil D.