
Cancellation-Patterns in TypeScript: AbortController gezähmt
Warum der Großteil des asynchronen TypeScript-Codes Cancellation komplett ignoriert, und wie man mit AbortController komponierbares, leckfreies Abbrechen aufbaut.
Kategorien
Software-Handwerk & Praktiken · 54 Artikel

Warum der Großteil des asynchronen TypeScript-Codes Cancellation komplett ignoriert, und wie man mit AbortController komponierbares, leckfreies Abbrechen aufbaut.

Nutze TypeScript Template Literal Types, um Event-Namen, Routenmuster und Berechtigungssätze direkt in dein Typsystem zu kodieren — ganz ohne Laufzeitprüfungen und ohne dass Strings auseinanderdriften.

Der satisfies-Operator von TypeScript prüft, ob ein Wert einem Typ entspricht, ohne die Inferenz der Literale zu verlieren — hier erfährst du, warum dieser Unterschied zählt und wann du ihn einsetzt.

Eliminieren Sie eine ganze Klasse von Laufzeitfehlern, indem Sie TypeScripts Typsystem beibringen, zwischen einer UserId und einer OrderId zu unterscheiden – selbst wenn beide intern Strings sind.

Das Typsystem von TypeScript endet bei der Kompilierung — Zod schließt diese Lücke, indem es Daten genau dort zur Laufzeit validiert, wo es wirklich darauf ankommt.

Weg vom try-catch-Wirrwarr: discriminated unions, Result-Typen und Fehlergrenzen, die TypeScript-Codebasen zuverlässiger und wartbarer machen.

Ein praktischer Leitfaden für eine Teststrategie, die echte Bugs findet – Unit-, Integrations- und End-to-End-Tests mit Vitest, Testing Library und Playwright sowie die Kompromisse jeder Ebene.

Fortgeschrittene TypeScript-Patterns, auf die ich täglich zurückgreife — Discriminated Unions, Branded Types, das Builder-Pattern und Utility-Types, die große Codebasen sicherer und wartbarer machen.

Implementiere Dependency Injection in TypeScript mit Constructor Injection, Factory Functions, DI-Containern und Kompositionsmustern auf Modulebene, die Testbarkeit verbessern und Komponenten ohne Framework-Lock-in entkoppeln.

Ein bewährtes Framework zur schnellen Diagnose und Behebung von Produktionsvorfällen — vom ersten Alert bis zur Root-Cause-Analyse und Prävention.

Etabliere Trunk-Based Development in Monorepos mit Strategien für Code-Ownership, selektive CI-Triggers, Merge-Queues und Branch-Protection, damit hunderte Entwickler täglich in ein einziges Repository liefern, ohne sich gegenseitig auf die Füße zu treten.

Implementiere ein robustes Feature-Flag-System mit prozentualen Rollouts, Nutzersegmentierung, A/B-Tests und Kill Switches, um Deployment und Release zu entkoppeln und mit Vertrauen in jedem Maßstab auszuliefern.

Praktische Teststrategien für verteilte Architekturen – von Contract Testing zwischen Services über Chaos Engineering zur Validierung der Resilienz bis zum Design von Integrationstests – und wie du Vertrauen in Systemen aufbaust, in denen End-to-End-Tests unpraktikabel sind.

Ein Rahmenwerk für fundierte technische Entscheidungen, wenn Anforderungen unvollständig sind, Zeitpläne eng sind und viel auf dem Spiel steht – mit Reversibilitätsanalyse, Entscheidungsprotokollen und systematischen Ansätzen zum Umgang mit Mehrdeutigkeit im Software-Engineering.

Wie man Observability nach links verschiebt, indem man Systeme von Anfang an um strukturierte Logs, verteilte Traces und aussagekräftige Metriken herum entwirft – für schnelleres Debugging und kürzere Reaktionszeiten bei Incidents in komplexen verteilten Architekturen.

Ein systematischer Ansatz für das Incident Management mit Alert-Design, Schweregrad-Klassifizierung, Bereitschaftsdienst-Workflows, Kommunikationsprotokollen und schuldfreien Post-Mortems.

Ein Überblick über Fehlertoleranz-Engineering mit Circuit Breakern, Bulkheads, Fallback-Ketten und Degradationsstrategien, die Systeme bei Ausfällen einzelner Komponenten nutzbar halten.

Ein praxisnaher Rahmen zur Messung technischer Schulden in konkreten Zahlen, die bei Stakeholdern ankommen – mit Code-Metriken, Entwickler-Velocity-Daten und Vorfallskorrelationen zur Rechtfertigung von Refactoring-Investitionen.

Praktiziere Chaos Engineering, indem du kontrollierte Fehler in Produktionssysteme injizierst, um Schwachstellen zu entdecken, bevor sie Ausfälle verursachen – mit praktischen Experimenten zu Netzwerkpartitionen, Ressourcenerschöpfung und Abhängigkeitsfehlern.

Baue ein robustes Feature-Flag-System, das schrittweise Rollouts, Nutzer-Targeting, A/B-Tests und Kill-Switches unterstützt, mit praktischen Mustern für das Flag-Lifecycle-Management, die die Anhäufung von technischen Schulden verhindern.

Implementiere Distributed Tracing in Microservices mit OpenTelemetry, mit praktischen Beispielen für Kontextpropagation, Span-Erstellung, Sampling-Strategien und Trace-Analyse, die undurchsichtige verteilte Systeme in debuggbare Systeme verwandeln.

Entwirf und führe wirksame Lasttests mit k6 durch – mit praktischen Mustern für Ramping-Strategien, realistische Nutzersimulation, schwellenwertbasierte Bestehen/Durchfallen-Kriterien und Ergebnisinterpretation, um Engpässe zu finden, bevor Produktionstraffic sie aufdeckt.

Baue produktionsreife verteilte Tracing-Infrastruktur mit OpenTelemetry auf, mit Kontextpropagation, Sampling-Strategien, Trace-Speicher-Backends, Korrelation mit Logs und Metriken sowie Kardinalitätsmanagement im Maßstab.

Erfahren Sie, wie Property-based Testing Hunderte zufällige Eingaben erzeugt, um Code-Invarianten zu prüfen, und so Grenzfälle aufdeckt, die handgeschriebene Beispieltests übersehen – mit praktischen Mustern in TypeScript und fast-check.

Beherrsche Techniken zum Debuggen verteilter Systeme mit Correlation IDs, verteilter Tracing-Kontextpropagierung, Log-Aggregationsmustern und kausaler Ordnung, um Requests über Services hinweg zu verfolgen und Ursachen zu identifizieren.

Wenden Sie systematische Refactoring-Strategien für Legacy-Codebasen an, darunter Charakterisierungstests, das Strangler Pattern und schrittweise Extraktion, um die Codequalität zu verbessern, ohne neue Regressionen einzuführen.

Entwickle robuste Error-Boundary-Strategien, die Fehler elegant abfangen, aussagekräftige Fallbacks bereitstellen, umsetzbare Diagnosen melden und verhindern, dass eine defekte Komponente die gesamte Anwendung zum Absturz bringt.

Wie du eigene ESLint-Regeln für die Konventionen deines Teams erstellst — mit AST-Selektoren, Regeltests, Auto-Fixern und der Veröffentlichung eines gemeinsamen Plugins, das Muster durchsetzt, die der Standard-Linter nicht erkennt.

Ein praktischer Leitfaden zu git rebase und interaktivem Rebase — wann rebase statt merge sinnvoll ist, Commits squashen, den Verlauf sicher umschreiben, Fehler beheben und Team-Workflows für einen sauberen Commit-Verlauf.

Eine entwicklerfreundliche Einführung in die Grundlagen von Compilern — mit Lexing, Parsing, ASTs und Codegenerierung sowie praktischen Beispielen, die dir helfen, besseren Code zu schreiben, eigene Tools zu bauen und Sprachfeatures besser zu verstehen.

Wie man Feature Toggles implementiert, die Trunk-Based Development, schrittweise Rollouts und sofortige Rollbacks ermöglichen – mit Toggle-Typen, Teststrategien und Cleanup-Praktiken, die Toggle-Schulden verhindern.

Wie du Git-Hooks nutzt, um Code-Quality-Checks, Commit-Message-Validierung, Pre-Push-Tests und Branch-Naming-Regeln zu automatisieren – mit praktischen Beispielen für Husky und eigene Skripte.

Wie man Request-for-Comments-Dokumente schreibt, die zu klaren technischen Entscheidungen führen — von der Struktur über die Einschätzung der Zielgruppe bis zur Alternativenanalyse und dem asynchronen Aufbau von Konsens.

Wie strukturiertes Logging die Fehlersuche in Produktionsumgebungen beschleunigt — JSON-Log-Formate, Kontextweitergabe, Log-Level, das Maskieren sensibler Daten und die Integration mit Tools zur Log-Aggregation.

Ein tiefgehender Blick auf asynchrone Iteratoren und Generatoren in JavaScript – mit for-await-of-Schleifen, asynchronen Generatorfunktionen, Backpressure-Handling und Streaming-Mustern aus der Praxis.

Wie Property-based Testing Grenzfälle aufdeckt, die eure Unit-Tests übersehen — eine praktische Anleitung mit fast-check, um tausende Testeingaben zu generieren und Invarianten automatisch zu prüfen.

Ein praktischer Leitfaden für Lasttests von APIs: Auswahl der richtigen Tools, realistische Traffic-Muster, Performance-Baselines, Identifikation von Engpässen und häufige Fehler.

So schreibst du technische Dokumentation, die Entwickler tatsächlich lesen – mit ADRs, Runbooks, API-Dokumentation und Documentation-as-Code-Workflows.

Techniken zur Diagnose von Memory Leaks, übermäßiger Allokation und OOM-Kills in Produktion — mit Heap Snapshots, Profiling-Tools und gängigen Leak-Patterns.

Wie Trunk-Based Development mit kurzlebigen Branches Merge-Konflikte reduziert, die Auslieferung beschleunigt und den main-Branch dauerhaft deploybar hält.

Muster für Integration Tests, die zuverlässig und schnell sind und echte Bugs finden – von der Datenbank-Einrichtung über API-Tests bis zur Vermeidung des Syndroms instabiler Tests.

Pragmatische funktionale Programmiermuster für TypeScript, die die Code-Klarheit verbessern, ohne einen vollständigen Paradigmenwechsel zu erfordern.

Ein praktischer Leitfaden zu TypeScript Generics, der dich von grundlegenden Typparametern zu fortgeschrittenen Conditional Types und Mustern mit Utility Types führt.

Wie du Code Reviews gibst, die echte Bugs finden, Wissen teilen und die Teamgeschwindigkeit verbessern, anstatt Engpässe zu erzeugen.

Wenn ein Request fünf Services durchläuft, sind Logs einzeln nutzlos — Distributed Tracing verbindet sie mit Trace-IDs, Spans und Context-Propagation.

Chaos Engineering ist die Praxis, absichtlich Fehler in Produktionssysteme zu injizieren, um Schwachstellen zu entdecken, bevor sie echte Ausfälle verursachen.

Closures, Event-Listener und nicht bereinigte Timer sind die häufigsten Memory-Leak-Muster in Node.js — so findest du sie, bevor sie die Produktion zum Absturz bringen.

Feature Flags entkoppeln Deployment und Release — so implementierst du sie, ohne in deiner Codebasis ein unentwirrbares Geflecht aus bedingter Logik zu erzeugen.

Die Monorepo-Debatte handelt nicht von Tools — sie handelt davon, wie dein Team über Projektgrenzen hinweg kommuniziert, deployt und Code teilt.

Strukturiertes Logging, Log-Level und Correlation-IDs — die Muster, die aus lauter Log-Ausgabe eine durchsuchbare, verwertbare Observability-Schicht machen.

Dependency Injection braucht weder Framework noch Decorators — so wendet man sie in TypeScript mit einfachen Mustern an, die Code testbar und flexibel machen.

Die Event Loop ist der Motor hinter jeder asynchronen Operation in JavaScript — so funktioniert sie wirklich, jenseits der oberflächlichen Erklärungen.

Trunk-based, GitFlow oder etwas dazwischen — wie man einen Git-Workflow wählt, der mit dem Team mitwächst, ohne in Merge-Konflikten zu versinken.

Nicht jeder Ratschlag zu sauberem Code ist gleich viel wert — das sind die Prinzipien, die Bugs wirklich reduzieren, das Onboarding beschleunigen und echte Deadlines überstehen.