TypeScriptRequestCommandsGenerator 1.1.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package TypeScriptRequestCommandsGenerator --version 1.1.3
                    
NuGet\Install-Package TypeScriptRequestCommandsGenerator -Version 1.1.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TypeScriptRequestCommandsGenerator" Version="1.1.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TypeScriptRequestCommandsGenerator" Version="1.1.3" />
                    
Directory.Packages.props
<PackageReference Include="TypeScriptRequestCommandsGenerator" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TypeScriptRequestCommandsGenerator --version 1.1.3
                    
#r "nuget: TypeScriptRequestCommandsGenerator, 1.1.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TypeScriptRequestCommandsGenerator@1.1.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TypeScriptRequestCommandsGenerator&version=1.1.3
                    
Install as a Cake Addin
#tool nuget:?package=TypeScriptRequestCommandsGenerator&version=1.1.3
                    
Install as a Cake Tool

CsharpToTypeScriptConverter

Automatische Typ-Synchronisation zwischen C# Backend und TypeScript Frontend – eliminiert Fehler und Overhead.


🎯 Das echte Problem

Teams mit separaten Backend- und Frontend-Entwicklern kämpfen mit einem fundamentalen Problem:

Backend Team ändert ein DTO:
public class CreateOrderCommand
{
    public int CustomerId { get; set; }
    public decimal Price { get; set; }
}

↓

Frontend Team weiß nichts davon und rät:
interface CreateOrderCommand {
    customerId?: string;      // ← FALSCH (sollte number sein)
    price?: string;           // ← FALSCH (sollte number sein)
}

↓

Laufzeit-Fehler in Produktion 😱

Das Resultat:

  • 2-3 Stunden Sync-Overhead pro Änderung
  • 50%+ Fehlerquote bei Typ-Mismatches
  • Gegenseitige Schuldzuweisungen zwischen Teams
  • Backend und Frontend sind nicht synchron

✅ Die Lösung

Dieser Generator macht aus dem Backend-Code die einzige Wahrheit.

Backend Developer ändert DTO:
public class CreateOrderCommand
{
    public int CustomerId { get; set; }
    public decimal Price { get; set; }
}

↓ (Automatisch!)

TypeScript wird NEU GENERIERT:
export interface CreateOrderCommand {
    customerId?: number;      // ← AUTOMATISCH RICHTIG
    price?: number;           // ← AUTOMATISCH RICHTIG
}

↓

Frontend Compiler warnt sofort ✓
TypeScript hat exakte Struktur ✓
Keine Typ-Fehler mehr ✓

🚀 Features

Automatische Generierung

  • C# DTOs → TypeScript Interfaces
  • C# Commands → TypeScript Commands
  • Rekursive Auflösung aller Abhängigkeiten
  • Vollständige Typ-Korrektheit

Zwei Generierungsmodi

SeparatedFiles – Jeder Typ in eigener Datei

output/
├─ CreateOrderCommand.ts
├─ OrderItemDto.ts
├─ CustomerDto.ts
└─ index.ts (Barrel Export)

✓ Modular und skalierbar
✓ Ideal für große Projekte (200+ Typen)
✓ Mit clearDestinationFolder Flag zum automatischen Leeren

OneFile – Alle Typen in einer Datei

output/
└─ api-types.ts

✓ Schneller Überblick
✓ Ideal für Prototypen und kleine Projekte

DDD-aware

  • Generiert nur API-relevante Typen (DTOs, Commands)
  • Respektiert Domain Model Grenzen
  • Saubere Separation zwischen intern und extern

📋 Verwendung

1. SeparatedFiles Generator

var generator = new SeparatedFilesGenerator()
    .SetInterfaceFilter(typeof(IRequestCommand))
    .SetReturnTypeOfCommands(typeof(Response))
    .SetRequestCommandInterfaceNameForGeneratedCommands("ICommand")
    .AddRangeOfCommandTypesToGenerate(commandTypes)
    .AddRangeOfExtraTypesToGenerate(dtoTypes);

var metadata = generator.GenerateMetadata();

var builtFiles = metadata
    .GenerateTypeScript()
    .Build();

// Speichern mit automatischem Verzeichnis-Clearing
builtFiles.Save(clearDestinationFolder: true);

2. OneFile Generator

var generator = new OneFileGenerator()
    .SetInterfaceFilter(typeof(IRequestCommand))
    .SetReturnTypeOfCommands(typeof(Response))
    .SetRequestCommandInterfaceNameForGeneratedCommands("ICommand")
    .AddRangeOfCommandTypesToGenerate(commandTypes)
    .AddRangeOfExtraTypesToGenerate(dtoTypes);

var metadata = generator.GenerateMetadata();

var builtFile = metadata
    .GenerateTypeScript()
    .Build("output/api-types.ts");

builtFile.Save();

💡 Praktische Beispiele

Szenario: Neues Feld hinzufügen

Alt (Horror):

1. Backend: Füge ShippingAddress hinzu → Push → Deploy
2. Frontend: "Warte, warum ist alles broken?" → Email → Warten
3. Frontend: Dokumentation suchen oder raten
4. Frontend: Code schreiben → Testen → Fehler → Reparieren
Zeit: 2-3 Stunden
Fehlerquote: 50%+

Neu (mit Generator):

1. Backend: Füge ShippingAddress hinzu → Push → Build
2. Build Pipeline: Generiert neue TypeScript Typen
3. Frontend: TypeScript Compiler warnt sofort "Property fehlt"
4. Frontend: Implementiert in 10 Minuten
Zeit: 10 Minuten
Fehlerquote: ~0%

Szenario: Typ-Fehler vermeiden

Backend:

public class OrderDto
{
    public decimal TotalPrice { get; set; }  // Dezimalzahl!
    public string Status { get; set; }
}

Automatisch generiert:

export interface OrderDto {
    totalPrice?: number;    // Nicht string! ✓
    status?: string;
}

TypeScript Compiler warnt sofort, wenn Frontend versucht price: "29.99" zu schicken. ✓


📊 Wirtschaftlicher Nutzen

Zeitersparnis

Szenario Alt Mit Generator Einsparung
Pro Änderung 2-3 Stunden 5 Minuten 95%
Pro Woche (5 Änderungen) 50-75 Stunden 25 Minuten 95%
Pro Monat 200-300 Stunden 100 Minuten 95%

Bug-Reduktion

Fehlertyp Alt Mit Generator
Naming-Fehler Häufig Unmöglich (Reflection)
Typ-Fehler Häufig Unmöglich (Konvertierung)
Struktur-Fehler Häufig Unmöglich (Rekursion)
Erkennung Laufzeit Compile-Zeit

Team-Zufriedenheit

  • ✓ Backend Team: "Wir generieren die Typen automatisch"
  • ✓ Frontend Team: "Danke, die sind immer aktuell"
  • ✓ Keine gegenseitigen Blockierungen
  • ✓ Fokus auf Features statt Synchronisation

🏛️ Architektur & Design

Generierungsprozess

1. Input: C# Types (DTOs, Commands)
   ↓
2. Reflection: Auslesen aller Properties & Typen
   ↓
3. Dependency Resolution: Finde alle abhängigen Typen
   ↓
4. Metadata Generation: Erstelle Typ-Definitionen
   ↓
5. TypeScript Rendering: Generiere .ts Code
   ↓
6. File Building: Erstelle BuildFile Objekte
   ↓
7. Output: Speichere in Dateien (SeparatedFiles/OneFile)

🔧 Installation & Setup

Voraussetzungen

  • .NET 9+
  • C# 13.0

NuGet Package

dotnet add package TypeScriptRequestCommandsGenerator

Schnelleinstieg

  1. Generiert Typen definieren:
var commands = assembly.GetTypes()
    .Where(t => typeof(IRequestCommand).IsAssignableFrom(t));

var dtos = assembly.GetTypes()
    .Where(t => t.Name.EndsWith("Dto"));
  1. Generator konfigurieren:
var generator = new SeparatedFilesGenerator()
    .SetInterfaceFilter(typeof(IRequestCommand))
    .SetReturnTypeOfCommands(typeof(ApiResponse))
    .AddRangeOfCommandTypesToGenerate(commands)
    .AddRangeOfExtraTypesToGenerate(dtos);
  1. Generieren & speichern:
generator.GenerateMetadata()
    .GenerateTypeScript()
    .Build()
    .Save(clearDestinationFolder: true);
  1. In CI/CD integrieren: Füge einen Build-Step hinzu, der den Generator nach Backend-Änderungen aufruft.

📁 Projektstruktur

CsharpToTypeScriptConverter/
├─ src/
│  ├─ CsharpToTypeScriptConverter.Generator/
│  │  ├─ Generators/          # Generator-Logik (SeparatedFiles, OneFile)
│  │  ├─ Models/              # BuildFile, GeneratorType, etc.
│  │  ├─ Templates/           # TypeScript Template Engine
│  │  └─ Tools/               # TypeFileGenerator, TypeResolver, etc.
│  └─ CsharpToTypeScriptConverter.Tests/
│     └─ ...                  # Unit & Integration Tests
└─ README.md                  # Diese Datei

🧪 Tests

dotnet test src/CsharpToTypeScriptConverter.Tests/CsharpToTypeScriptConverter.Tests.csproj

Tests überprüfen:

  • ✓ Korrekte TypeScript Generierung
  • ✓ Dependency Resolution
  • ✓ Datei-Strukturen (Separated vs OneFile)
  • ✓ Spezielle Typen (Enums, Interfaces, etc.)

🎓 Für wen ist das?

✓ Kleine Teams (2-3 Devs)

Auch bei guter Kommunikation: Versicherung gegen menschliche Fehler.

✓ Wachsende Teams (5-10+ Devs)

Essentiell! Manuelle Synchronisation wird unmöglich.

✓ Große Projekte (200+ Typen)

Unverzichtbar! Ohne Generator: Chaos garantiert.

✓ Agile Entwicklung

Häufige Änderungen? Generator spart Stunden jede Woche.


❓ FAQ

"Aber wir nutzen Swagger/OpenAPI?"

Unterschied:

  • Swagger dokumentiert HTTP-Schnittstellen (was du schicken kannst)
  • Dieser Generator generiert exakte TypeScript Typen (wie die Struktur aussieht)

Beide können zusammen verwendet werden!

"Wir haben noch nie Probleme mit Typ-Sync?"

Dann seid ihr wahrscheinlich:

  • Sehr klein (< 3 Devs)
  • Sehr gut organisiert
  • Sehr viel Glück gehabt

Trotzdem: Generator würde euch 10+ Stunden/Monat sparen.

"Ist das nicht overkill?"

Nein. Mit 200+ Typen und 5+ Änderungen/Woche sind 10-20 Stunden Sync-Overhead normal. Generator spart das komplett.

"Können wir das in unsere CI/CD integrieren?"

Ja! Perfekt für:

  • Post-Build Hook
  • PR-Validierung
  • Auto-Commit der generierten Typen

📝 Lizenz

Siehe LICENSE Datei.


🤝 Contributing

Contributions sind willkommen! Bitte erstelle einen Pull Request oder öffne ein Issue.


🎯 Zusammenfassung

CsharpToTypeScriptConverter löst ein echtes Problem:

Statt Stunden mit manueller Typ-Synchronisation zu verschwenden, konzentrieren sich Teams auf das was zählt: Features entwickeln.

Der Generator macht aus dem Backend-Code die einzige Wahrheit. Das Resultat:

  • ✅ Keine Typ-Fehler
  • ✅ 95% weniger Sync-Overhead
  • ✅ Keine Blockierungen zwischen Teams
  • ✅ Glücklichere, produktivere Teams

Das ist kein Nice-to-Have. Das ist eine Versicherung gegen menschliche Fehler.


Ready to sync your types automatically? 🚀

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.8 129 1/15/2026
1.1.7 95 1/12/2026
1.1.6 93 1/8/2026
1.1.5 88 1/8/2026
1.1.4 86 1/8/2026
1.1.3 90 1/8/2026
1.1.2 89 1/8/2026
1.1.1 88 1/7/2026
1.1.0 85 1/7/2026
1.0.0 85 1/6/2026
0.9.49 87 1/5/2026
0.9.48 90 1/5/2026
0.9.47 86 1/5/2026
0.9.46 87 1/4/2026
0.9.45 87 1/4/2026
0.9.44 90 1/3/2026
0.9.43 89 1/2/2026
0.9.42 93 1/2/2026
0.9.41 88 1/2/2026
0.9.4 87 1/2/2026
Loading failed