Next:
Impressum
typescript
1
Impressum
2
Einführung
3
Vergleich zwischen TypeScript und JavaScript
3.1
Einführung
3.2
Ähnlichkeiten zwischen TypeScript und JavaScript
3.3
Unterschiede zwischen TypeScript und JavaScript
3.4
Warum TypeScript? Vor- und Nachteile gegenüber JavaScript
3.5
Praktische Beispiele: JavaScript vs. TypeScript
4
Die Entwicklung von TypeScript und EcmaScript
5
Laufzeitumgebungen (Browser oder Node.js)
5.1
Browser
5.2
Node.js
5.3
TypeScript in Browser und Node.js
6
Entwicklungsumgebungen für TypeScript
6.1
Visual Studio Code (VS Code)
6.2
JetBrains WebStorm
7
Transcompiling von TypeScript
8
Node Packet Manager (npm / yarn)
8.1
Die package.json-Datei
8.2
Node Package Manager (npm)
8.3
Yarn
8.4
Run npm start in vscode
9
Babel.js und Co.
10
tsconfig.json
11
Browserkompatibilität / Polyfills
11.1
Polyfills
11.2
TypeScript und Browser-Kompatibilität
12
Datentypen
12.1
Boolean
12.2
Number
12.3
String
12.4
Array
12.5
Tuple
12.6
Enum
12.7
Any
12.8
Void
12.9
Null und Undefined
12.10
Never
12.11
Object
12.12
Aufgaben
12.13
Lösungen
13
Arrays
13.1
Erstellen von Arrays
13.2
Zugriff auf Elemente
13.3
Array-Methoden
13.4
Mehrdimensionale Arrays
13.5
Aufgaben
14
Konstanten
15
Enumerations
15.1
Aufgaben
16
Typisierung
16.1
Statische Typisierung
16.2
Typinferenz
16.3
Union Type
16.4
Type Aliase
16.5
Aufgaben
17
Operatoren
17.1
Arithmetische Operatoren
17.2
Zuweisungsoperatoren
17.3
Vergleichsoperatoren
17.4
Logische Operatoren
17.5
Ternäre/Bedingungsoperatoren
17.6
Typ-Operatoren
17.7
Bitweise Operatoren
18
Kontrollstrukturen
18.1
If-Anweisung
18.2
Else-Anweisung
18.3
Else If-Anweisung
18.4
While-Schleife
18.5
Do-While-Schleife
18.6
For-Schleife
18.7
For-Of-Schleife
18.8
For-In-Schleife
18.9
Switch-Anweisung
19
Funktionen
19.1
Anonyme Funktionen und Arrow Functions
19.2
Funktionen mit optionalen und Standardparametern
19.3
Funktionen mit Restparametern
20
Asynchronität
20.1
Async-Funktionen
20.2
Das Await-Schlüsselwort
20.3
Fehlerbehandlung
20.4
Parallele Ausführung
20.5
Promise-Handhabung mit then, catch und finally
20.5.1
Die then() Methode
20.5.2
Die catch() Methode
20.5.3
Die finally() Methode
20.6
async/await vs then/catch/finally
20.6.1
Syntaktische Unterschiede
20.6.2
Anwendungsunterschiede
20.6.3
Fehlerbehandlung
20.7
Aufgaben
20.7.1
Übungsaufgaben zu
async
und
await
:
20.7.2
Lösungen
20.7.3
Übungsaufgaben zu
then
,
catch
und
finally
:
20.7.4
Lösungen
21
Interfaces
22
Objektorientierung mit TypeScript
22.1
Klassen
22.2
Vererbung
22.3
Interfaces
22.4
Konstruktoren
22.5
Access modifier
22.5.1
Public
22.5.2
Private
22.5.3
Protected
22.6
Getter und Setter
22.7
Abstrakte Klassen
23
Optionale Attribute
23.1
Definition
23.2
Verwendung
23.3
Optionale Verkettung
23.4
Nullish Coalescing Operator
24
Generics in TypeScript
24.1
Generics in Funktionen
24.1.1
Generics mit mehreren Typen
24.2
Generics in Klassen
24.2.1
Generische Klassen mit mehreren Typen
24.3
Generics in Interfaces
24.3.1
Interfaces als Funktionstypen
25
Module in TypeScript
25.0.1
Beispiel für eine tsconfig.json mit esModuleInterop
25.0.2
Einfache Module
25.0.3
Mehrfachexporte und -importe
25.0.4
Gesamte Module importieren
26
Type Manipulation
26.1
Union Types
26.2
Type Aliases
26.3
Intersection Types
26.4
Type Guards
26.5
Type Casting
26.6
Mapped Types
27
Rest Parameter
28
ES6+ Funktionen in TypeScript
28.1
Arrow Functions
28.2
Standardparameter
28.3
Rest-Parameter und Spread-Operator
28.4
Template Strings
28.5
Destructuring Assignment
28.6
Weitere Überlegungen
29
Tipps und Tricks
29.0.1
Praktische Beispiele
30
Effektive TypeScript-Praktiken: Do’s and Don’ts
30.1
Do’s:
30.1.1
Praktisches Beispiel für Generics:
30.2
Don’ts:
30.2.1
Praktisches Beispiel für Typinferenz:
31
ESLint und TypeScript
31.1
Installation und Aktualisierung
31.2
Konfiguration und Regelverständnis
31.3
Integration in Entwicklungswerkzeuge
31.4
Einsatz als Pre-Commit Hook
31.5
Fortgeschrittene Konfiguration und Performance
32
CodeStyle und Konventionen
32.1
Benennung von Variablen, Funktionen, Klassen und Interfaces
32.2
Typisierung
32.3
Indentation und Zeilenumbrüche
32.4
Semicolons
32.5
Importe und Exporte
32.6
Funktionen und Klassen
32.7
ESLint, Prettier und weitere Praktiken
33
Decorators Deep Dive in TypeScript
33.1
Status als “Experimentelles Feature”
33.2
Klassen-Decorators
33.3
Method-Decorators
33.4
Accessor-Decorators
33.5
Property-Decorators
33.6
Parameter-Decorators
33.7
Funktions-Decorators
34
Typisierte Arrays
34.1
Erstellung Typisierter Arrays
34.2
Typüberprüfungen
34.3
Arrays mit Mischtypen
34.4
Readonly-Arrays
34.5
Typinferenz
34.6
Multidimensionale Arrays
34.7
Arrays von Objekten und Interfaces
34.8
Array-Methoden und Typsicherheit
35
Multiple Datentypen in Arrays mit Union Types
35.1
Definition von Union Types in Arrays
35.2
Verwendung von Type Guards
35.3
Erweiterte Union Types
35.4
Praktische Anwendungsfälle
35.5
Einschränkungen und Herausforderungen
35.6
Interaktion mit Array-Methoden
36
Tuples in TypeScript: Strukturierte Daten effizient verwalten
36.1
Grundlagen von Tupeln
36.2
Benannte Tupel
36.3
Typinferenz in Tupeln
36.4
Dekonstruktion von Tupeln
36.5
Immutability von Tupeln
36.6
Einsatz in Funktionssignaturen
36.7
Vergleich mit anderen Datentypen
37
Namespaces in TypeScript: Strukturierung und Organisation von Code
37.1
Grundlegendes zu Namespaces
37.2
Verschachtelte Namespaces
37.3
Einsatzbereiche und Grenzen von Namespaces
37.4
Namespaces vs. Module
37.5
Mischung von Namespaces und Modulen
37.6
Best Practices für die Verwendung von Namespaces
38
Erstellung von TypeScript-Deklarationsdateien für JavaScript-Bibliotheken
38.1
Beispiel einer Einfachen Deklarationsdatei
38.2
Komplexere Strukturen
38.3
Automatische Generierung von Deklarationsdateien
38.4
Verwaltung von Abhängigkeiten
38.5
Best Practices für die Organisation
38.6
Fehlerbehebung und Validierung
38.7
Distribution und Verweis in
package.json
38.8
Praktisches Vorgehen
38.8.1
Schritt 1: Verstehen der Bibliothek
38.8.2
Schritt 2: Manuelle Erstellung der Grundstruktur
38.8.3
Schritt 3: Nutzung von Werkzeugen zur Unterstützung
38.8.4
Schritt 4: Feinabstimmung und Tests
38.8.5
Schritt 5: Distribution
38.8.6
Zusätzliche Tipps
38.9
Beispiel
38.9.1
Schritt 1: Erstellen einer einfachen JavaScript-Bibliothek
38.9.2
Schritt 2: Manuelle Erstellung der Deklarationsdatei
38.9.3
Schritt 3: Verwendung der Bibliothek in einem TypeScript-Projekt
38.9.4
Schritt 4: Verteilung Ihrer Bibliothek
39
Fortgeschrittene Nutzung von Interfaces
39.1
Komplexe Interface-Strukturen
39.2
Methodensignaturen in Interfaces
39.3
Kombination von Interfaces
39.4
Interfaces mit Funktionen
39.5
Interfaces vs. Type Aliases
39.6
Conditional Typing
39.7
Best Practices
40
Erweiterte Vererbung und abstrakte Klassen
40.1
Abstrakte Klassen und ihre erweiterte Nutzung
40.1.1
Abstrakte Methoden und Eigenschaften
40.1.2
Schutz von Konstruktoren
40.2
Mixins für Mehrfachvererbung
40.2.1
Typsicherheit in Mixins
40.2.2
Herausforderungen und Best Practices
41
Vererbung versus Komposition (FCoI)
41.1
Vererbung in TypeScript
41.1.1
Vor- und Nachteile der Vererbung
41.1.2
Polymorphismus
41.2
Komposition in TypeScript
41.2.1
Erweiterte Nutzung der Komposition
41.3
Designprinzipien
41.3.1
Open/Closed-Prinzip und Liskovsche Substitutionsprinzip
41.3.2
Interface-Segregation und Dependency Inversion
41.4
Kombination beider Ansätze
42
Dateioperationen
42.1
Einbinden des
fs
Moduls
42.2
Datei lesen
42.3
Datei schreiben
42.4
Datei löschen
43
Verzeichnisse
43.1
Einbinden des
fs
Moduls
43.2
Erstellen von Verzeichnissen
43.3
Lesen von Verzeichnissen
43.4
Löschen von Verzeichnissen
43.5
Ändern von Zugriffsrechten
44
JSON
44.1
Erstellen von JSON-Objekten
44.2
Konvertieren von JavaScript-Objekten in JSON
44.3
Konvertieren von JSON in JavaScript-Objekte
44.4
Lesen und Ändern von JSON-Daten
44.5
Arbeiten mit JSON-Dateien
45
Anwendung von Separation of Concerns in TypeScript
45.1
Modularisierung des Codes
45.2
Service Layers und Data Access Objects (DAOs)
45.3
Dependency Injection
45.4
Einsatz von Designmustern
45.5
Beispielprojekt
45.6
Trennung von Zustand und UI in Frontend-Architekturen
45.7
Unit-Tests und Mocking
45.8
Best Practices und Fallstricke
46
Design Patterns mit TypeScript
46.1
Singleton-Pattern
46.2
Factory-Pattern
46.3
Observer-Pattern
46.4
Decorator-Pattern
46.5
Strategy-Pattern
46.6
Command-Pattern
46.7
Bridge-Pattern
46.8
Chain of Responsibility-Pattern
46.9
Vor- und Nachteile, Anwendungsfälle und Best Practices
47
Clean Code in TypeScript: Best Practices für effiziente und wartbare Codebasen
47.1
Klarheit und Lesbarkeit
47.2
Typisierung zur Verbesserung der Codequalität
47.3
SOLID-Prinzipien in TypeScript
47.4
Einsatz funktionaler Konzepte
47.5
Effizientes State-Management
47.6
Vermeidung von Nebeneffekten
47.7
Praktische Anwendungen und Fallstudien
47.8
Code Reviews und Pair Programming
48
Testing mit TypeScript
48.1
Unit-Tests
48.2
Integration Tests
48.3
E2E Tests mit Cypress
48.4
Vollständiges Jest Beispiel
48.4.1
Schritt 1: Projekt Setup
48.4.2
Schritt 2: TypeScript und Jest installieren
48.4.3
Schritt 3: TypeScript-Konfiguration
48.4.4
Schritt 4: Jest-Konfiguration
48.4.5
Schritt 5: Erstellen Sie ein Test-Skript
48.4.6
Schritt 6: Schreiben Sie den Code und die Tests
48.4.7
Schritt 7: Ausführen der Tests
48.4.8
Vollständige
package.json
49
OpenAPI und die Anwendung des OpenAPI-Generators (TypeScript-Node)
49.1
OpenAPI-Generator
49.1.1
TypeScript-Node Generator
49.2
Erstellung einer
package.json
für ein TypeScript-Node-Projekt
49.3
Einführung in OpenAPI Contracts
49.3.1
Kernkomponenten eines OpenAPI Contracts
49.3.2
Beispiel: Benutzer API Contract
49.4
Anwendung des generierten TypeScript-Node-Codes
49.4.1
Einbinden der generierten Module
49.4.2
Initialisierung des API-Clients
49.5
Abrufen von Benutzerdaten
49.6
Erstellung eines Server Mocks für Testzwecke
49.6.1
Schritt 1: Erstellen der Daten-Datei
db.json
49.6.2
Schritt 2: Verwendung von
json-server
zum Erstellen des Mock-Servers
49.6.3
Funktion des Mock-Servers
49.6.4
Nutzen für die Entwicklung
50
TypeScript Generatoren und Thread-Sicherheit
50.1
Grundlagen der Generatoren in TypeScript
50.2
Thread-Sicherheit in JavaScript und TypeScript
50.3
Generatoren und Node.js Worker-Threads
50.4
TL;DR
51
Übungsaufgaben