Open Source — MIT-Lizenz

SharpTS

Ein TypeScript-Interpreter und AOT-Compiler für .NET

Führen Sie es als Skript für sofortiges Feedback aus oder kompilieren Sie es zu einer nativen .NET-Assembly — mit vollem Zugriff auf das .NET-Ökosystem.

curl -fsSL https://sharpts.dev/setup.sh | sh
Auf GitHub mit Stern markieren
example.ts
// Führen Sie TypeScript direkt auf .NET aus
interface Greeter {
    greet(name: string): string;
}

class WelcomeBot implements Greeter {
    constructor(private prefix: string) {}

    greet(name: string): string {
        return `${this.prefix}, ${name}! Welcome to SharpTS.`;
    }
}

const bot = new WelcomeBot("Hello");
console.log(bot.greet("Developer"));
// → Hello, Developer! Welcome to SharpTS.

Was SharpTS leistet

Schreiben Sie TypeScript, das auf der .NET-Laufzeit läuft — interpretiert für schnelle Iteration oder kompiliert zu nativen .NET-Assemblys.

Sofort ausführen

Richten Sie SharpTS auf eine .ts-Datei, und sie läuft — ohne Build-Schritt, ohne Konfiguration. Ideal für Skripte, Automatisierung und das Ausprobieren von Ideen in der REPL.

Nach .NET kompilieren

Vorzeitige Kompilierung zu einer echten .NET-Assembly — einer DLL, einer eigenständigen ausführbaren Datei oder einem NuGet-Paket — mit nativer CLR-Geschwindigkeit.

Interop in beide Richtungen

Rufen Sie .NET-Bibliotheken aus TypeScript mit @DotNetType auf und nutzen Sie Ihr kompiliertes TypeScript aus C#. Verwenden Sie die BCL, NuGet-Pakete und vorhandenen Code weiter.

Breite TypeScript-Unterstützung

Verwenden Sie vertrautes TypeScript — Generics, Klassen, Dekoratoren, Async, Module und mehr — mit Typprüfung vor der Ausführung. Den praktischen Kompatibilitätsüberblick finden Sie weiter unten.

Passt in Ihren .NET-Build

Fügen Sie das SharpTS.Sdk zu einem .NET-Projekt hinzu, und dotnet build kompiliert Ihr TypeScript zusammen mit Ihrem C# — dieselbe Toolchain, dasselbe Ergebnis.

Editor-Unterstützung

Ein Language Server bringt Autovervollständigung, Typprüfung und „Gehe zu Definition“ in VS Code und Visual Studio.

In Aktion sehen

Echtes TypeScript, ausgeführt auf der .NET-Laufzeit

const greeting: string = "Hello from SharpTS!";
const version: number = 1.0;
console.log(`${greeting} v${version}`);

const languages = ["TypeScript", "C#", ".NET"];
languages.forEach(lang => console.log(`  ✓ ${lang}`));
Ausgabe
Hello from SharpTS! v1
  ✓ TypeScript
  ✓ C#
  ✓ .NET

Eigenen Code ausführen? Playground öffnen ↓

Wann SharpTS passt

Konkrete Situationen, in denen TypeScript auf .NET die bessere Wahl ist als Node — oder als C#.

Skripte und Automatisierung für .NET-Teams

Schreiben Sie Build-Skripte, Entwickler-Tools und einmalige Automatisierung in TypeScript mit der gesamten BCL — auf Maschinen, die bereits das .NET SDK haben und keine Node-Toolchain. Kein package.json, kein Build-Schritt: Richten Sie sharpts auf die Datei.

Terminal
sharpts rotate-logs.ts

TypeScript-Logik als .NET-Bibliothek ausliefern

Kompilieren Sie ein TypeScript-Modul zu einer echten Assembly und veröffentlichen Sie es als versioniertes NuGet-Paket. Mit einer Referenz-Assembly instanziieren C#-Aufrufer Ihre Klassen und rufen Ihre Methoden vollständig typisiert auf.

Terminal
sharpts --compile pricing.ts --ref-asm
sharpts --compile pricing.ts --pack

TypeScript-Entwickler in einer .NET-Codebasis

Lassen Sie Kolleginnen und Kollegen mit TypeScript-Hintergrund in der Sprache beitragen, die sie am besten kennen. Mit dem SharpTS.Sdk werden ihre .ts-Dateien im selben dotnet build kompiliert wie die C#-Projekte drumherum — eine Toolchain, eine CI-Pipeline.

app.csproj
<Project Sdk="SharpTS.Sdk/1.0.0">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <SharpTSEntryPoint>src/main.ts</SharpTSEntryPoint>
  </PropertyGroup>
</Project>

Eigenständige Kommandozeilen-Tools

Kompilieren Sie zu einer einzigen eigenständigen ausführbaren Datei, die ohne separate Laufzeitinstallation läuft — kein Node auf der Zielmaschine, kein node_modules-Ordner neben Ihrem Tool.

Terminal
sharpts --compile tool.ts -t exe
./tool

So funktioniert es

Eine mehrstufige Pipeline vom Quellcode bis zur Ausführung

QuellcodeLexerParserTypprüferInterpreterIL-Compiler
So funktioniert es

Interaktiver Playground

Schreiben Sie TypeScript und führen Sie es auf .NET aus — direkt in Ihrem Browser

Ausgabe
Klicken Sie auf Ausführen oder drücken Sie Strg+Eingabe zum Ausführen

Was unterstützt wird

Ein praktischer Überblick über die heute verfügbaren TypeScript- und Laufzeitfunktionen. Messbare Details finden Sie unter Konformität.

TypeScript im Alltag

Klassen, Generics, Union-Typen, Dekoratoren, Module, async/await und moderne Typsystemfunktionen werden in SharpTS-Workflows unterstützt.

Standardlaufzeit

Gängige APIs für Array, String, Collections, Promise, Date, RegExp, JSON, Symbol und typisierte Arrays sind verfügbar.

Pakete und Node.js

Importe ohne Pfad sowie die exports/imports-Felder von Paketen können aufgelöst werden, Pakete benötigen aber weiterhin SharpTS-kompatible Syntax und Laufzeit-APIs. Pakete mit TypeScript-Quellcode eignen sich am besten.

Bekannte Einschränkungen

Proxy und WeakRef sind nicht implementiert. Bei Grenzfällen der Spezifikation können sich die Ergebnisse von Interpreter und AOT ebenfalls unterscheiden.

Häufig gestellte Fragen

Die Fragen, die zuerst kommen — direkt beantwortet.

Worin unterscheidet sich SharpTS von tsc?

tsc prüft die Typen Ihres Codes und erzeugt JavaScript, das eine Engine wie Node ausführt. SharpTS erzeugt nie JavaScript: Es prüft dasselbe TypeScript und führt es dann entweder direkt aus oder kompiliert es zu einer .NET-Assembly. Nirgendwo in der Kette steckt Node. Das Setup-Skript verwendet das .NET SDK, wenn es verfügbar ist, oder installiert andernfalls eine eigenständige Variante.

Warum nicht eine JavaScript-Engine wie Jint oder ClearScript einbetten?

Diese Projekte führen reines, untypisiertes JavaScript in einem .NET-Host aus — gut geeignet für kleine eingebettete Skripte. SharpTS führt TypeScript selbst aus, typgeprüft vor der Ausführung, und bietet, was eine eingebettete JS-Engine nicht kann: vorzeitige Kompilierung zu IL, NuGet-Paketierung und typisierte Interop in beide Richtungen zwischen TypeScript und C#.

Kann ich npm-Pakete verwenden?

Teilweise. Importe ohne Pfad werden über node_modules aufgelöst; unterstützte Modulauflösungsmodi können außerdem die exports/imports-Felder und bedingte Ziele von Paketen anwenden. Pakete können dennoch scheitern, wenn sie nicht unterstützte Syntax, native Add-ons, Browser-Globals oder fehlende Laufzeit-APIs voraussetzen. Pakete mit TypeScript-Quellcode eignen sich am besten.

Zur Node.js-Kompatibilitätsübersicht →
Ist es schnell?

Jeder Modus antwortet anders. Der Interpreter durchläuft den Syntaxbaum und ist auf sofortigen Start ausgelegt — richtig für Skripte und die REPL, nicht für Zahlenakrobatik. Der kompilierte Modus erzeugt IL, das der CLR-JIT wie jede C#-Assembly kompiliert: Es läuft als nativer .NET-Code. In beiden Modi werden die Typen vorab geprüft und dann entfernt — zur Laufzeit kosten sie nichts.

Wie ausgereift ist SharpTS?

SharpTS ist ein junges, MIT-lizenziertes Projekt in aktiver Entwicklung. Der Kompatibilitätsüberblick oben fasst gängige Funktionen zusammen, die gemessene Konformität liefert detaillierte Nachweise und STATUS.md verfolgt Implementierungslücken.

Fortschritt in STATUS.md verfolgen →

Erste Schritte

In drei Schritten einsatzbereit

1

Installieren

Führen Sie das Setup-Skript aus, um die passende SharpTS-Variante für diesen Rechner zu installieren

curl -fsSL https://sharpts.dev/setup.sh | sh
2

Schreiben

Erstellen Sie eine TypeScript-Datei

hello.ts
interface Config {
    name: string;
    debug: boolean;
}

const config: Config = { name: "MyApp", debug: true };
console.log(`Starting ${config.name}...`);
3

Ausführen

Direkt interpretieren oder zu einer .NET-Assembly kompilieren

Terminal
# Interpretieren (sofortiger Start)
sharpts hello.ts

# Zu einer .NET-Assembly kompilieren
sharpts --compile hello.ts -o hello