Git-Workflow für TypeScript: Wie man in typisiertem Code nicht den Verstand verliert

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Git-Workflow für TypeScript: Wie man die Angst vor Merge-Konflikten verliert

\n\n

Wenn Sie jemals versucht haben, zwei Branches zu mergen, wobei einer das Interface User geändert hat und der andere einen neuen Typ im selben Modul hinzugefügt hat, dann wissen Sie, was eine existenziellen Krise eines Entwicklers ist. TypeScript gibt uns ein mächtiges Typsystem, aber ohne den richtigen Git-Workflow wird diese Macht zum Kopfschmerz.

\n\n

In diesem Artikel werden wir den optimalen Git-Workflow für TypeScript-Projekte durchgehen – von der Einrichtung der Branches bis zur automatischen Typprüfung bei jedem Commit. Kein Blabla, nur das, was im echten Einsatz wirklich funktioniert.

\n\n

Warum TypeScript einen besonderen Ansatz für Git erfordert?

\n\n

TypeScript ist nicht einfach „JavaScript mit Typen“. Es ist eine Sprache, bei der jede Änderung Dutzende von Dateien über interface, type und Generics betreffen kann. Eine einzige falsche Änderung an einem Basistyp – und das gesamte Projekt kompiliert nicht mehr.

\n\n

Daher sollte ein standardmäßiger Git-Workflow für TypeScript Folgendes beinhalten:

\n\n
    \n
  • Zwingende Typprüfung vor dem Commit
  • \n
  • Einen Linter, der das Committen von unformatiertem Code verhindert
  • \n
  • Eine klare Branching-Strategie, damit Merge-Konflikte keine Typen zerstören
  • \n
  • CI/CD, das alles auf dem Server noch einmal überprüft
  • \n
\n\n

Lassen Sie uns jeden Punkt der Reihe nach durchgehen.

\n\n

1. Branching-Strategie wählen: Git Flow oder Trunk-based?

\n\n

Für TypeScript-Projekte empfehle ich Trunk-based Development mit kurzlebigen Branches. Warum? Weil TypeScript-Code im Grunde „roher“ Code ist, der schnell überprüft und deployed werden muss. Lange Branches führen dazu, dass die Typen „auseinanderdriften“.

\n\n

Basisstruktur der Branches

\n\n
main        – stabile Version, immer bereit zum Deploy\ndevelop     – Hauptentwicklungsbranch\nfeature/*   – neue Features (leben 1-2 Tage)\nfix/*       – Bugfixes\nrelease/*   – Release-Vorbereitung (optional)\n
\n\n

Beispiel für ein TypeScript-Projekt:

\n\n
git checkout -b feature/add-user-validation\n# arbeiten...\ngit commit -m "feat: add email validation for User type"\ngit push origin feature/add-user-validation\n# PR erstellen → merge in develop\n
\n\n

Wichtig: Führen Sie niemals einen Rebase auf main durch, wenn das Projekt gemeinsame Typen hat. Verwenden Sie Merge – er bewahrt die Historie und zerstört keine Abhängigkeiten.

\n\n

2. Git Hooks: Schutz vor Dummheit (und vor sich selbst)

\n\n

Das häufigste Szenario: Sie vergessen, tsc auszuführen, committen, pushen, und CI schlägt fehl. Um dies zu vermeiden, richten wir Pre-Commit-Hooks ein.

\n\n

Installation von Husky + lint-staged

\n\n

Husky ist ein Tool zur Verwaltung von Git Hooks. lint-staged führt Befehle nur auf geänderten Dateien aus.

\n\n
npm install --save-dev husky lint-staged\nnpx husky init\n
\n\n

Erstellen Sie die Datei .husky/pre-commit:

\n\n
#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\nnpx lint-staged\n
\n\n

In package.json fügen Sie hinzu:

\n\n
{\n  "lint-staged": {\n    "*.ts": [\n      "eslint --fix",\n      "prettier --write",\n      "tsc --noEmit"\n    ]\n  }\n}\n
\n\n

Jetzt wird vor jedem Commit:

\n
    \n
  1. ESLint mit Autofix ausgeführt
  2. \n
  3. Code mit Prettier formatiert
  4. \n
  5. Die TypeScript-Kompilierung überprüft (tsc --noEmit)
  6. \n
\n\n

Wenn auch nur ein Schritt fehlschlägt – der Commit wird nicht durchgeführt. Hart, aber effektiv.

\n\n

3. Korrekte Commit-Nachrichten: Conventional Commits

\n\n

TypeScript-Projekte profitieren von Conventional Commits, weil:

\n
    \n
  • Automatisch ein Changelog generiert wird
  • \n
  • Leicht zu verstehen ist, welche Änderungen Typen zerstören
  • \n
  • CI nur bei bestimmten Commits getriggert werden kann
  • \n
\n\n

Beispiele:

\n\n
feat: add UserRole enum and validation\nfix: c                

Blogs

Buchempfehlungen