- "The missing Standard Library for TypeScript"
- Entwickelt, um komplexe synchrone/asynchrone Programme einfach erstellen zu können
- Macht Code stärker composable, reusable und testable
- Maximale Type-Safety (einschließlich Error Handling)
- Bietet zahlreiche Bibliotheken
- Bietet Clustering & Workflow (Alpha-Version)
- Breite Kompatibilität
- Node, Deno, Bun, Cloudflare Workers, Chrome
- React, Solid.JS, Vite, Next.JS, Tauri
- Wichtige Merkmale
- Concurrency: Mit einem Fiber-basierten Nebenläufigkeitsmodell lassen sich hochgradig skalierbare Anwendungen mit extrem niedriger Latenz umsetzen
- Composability: Mit kleinen, wiederverwendbaren Bausteinen lassen sich wartbare, gut lesbare und flexible Software-Systeme entwickeln
- Resource Safety: Auch wenn ein Programm fehlschlägt, lassen sich Erwerb und Freigabe von Ressourcen sicher verwalten
- Type Safety: Durch den Fokus auf Typinferenz und Type Safety lässt sich das TypeScript-Typsystem maximal ausnutzen
- Error Handling: Mit integrierten Funktionen zur Fehlerbehandlung lassen sich Fehler strukturiert und zuverlässig behandeln
- Asynchronicity: Code kann so geschrieben werden, dass er unabhängig davon, ob er synchron oder asynchron ist, gleich aussieht
- Observability: Dank vollständiger Tracing-Funktionen lässt sich die Programmausführung leicht debuggen und überwachen
Warum Effect?
- Programmieren ist schwierig
- Beim Erstellen von Bibliotheken und Apps werden viele Werkzeuge genutzt, um Komplexität zu beherrschen
- Effect schlägt eine neue Denkweise für TypeScript-Programmierung vor
- Mit den Werkzeugen des Effect-Ökosystems lassen sich bessere Anwendungen und Bibliotheken entwickeln
- Dadurch kann man die TypeScript-Sprache und ihr Typsystem besser verstehen und Programme zuverlässiger und wartbarer machen.
Das Effect-Muster
- In gewöhnlichem TypeScript-Code wird oft angenommen, dass eine Funktion entweder erfolgreich ist oder eine Exception wirft
- Beispiel: Die Funktion
divide wirft bei einer Division durch 0 eine Exception
- Allein am Typ ist nicht erkennbar, dass diese Funktion eine Exception werfen kann
- Wenn eine Codebasis Hunderte oder Tausende Funktionen enthält, wird dieses Problem größer
- Es ist leicht, Fehlerbehandlung zu vergessen, und schwer, sie zu verwalten
- Der TypeScript-Compiler ist die erste Verteidigungslinie gegen Bugs, Domänenfehler und allgemeine Komplexität
Das Effect-Muster anwenden
- Die zentrale Einsicht von Effect ist, dass sich das Typsystem nutzen lässt, um nicht nur Erfolgswerte, sondern auch Fehler und "Kontext" nachzuverfolgen
- Beispiel: Die Effect-Version der Funktion
divide wirft keine Exception, sondern gibt den Fehler an den Aufrufer weiter
- Es bietet Funktionen zur Verwaltung von Fehlern und Erfolgswerten
- Durch Kontextverfolgung können Funktionen zusätzliche Informationen erhalten, ohne dass alle Argumente weitergereicht werden müssen
- Beispiel: Während Tests kann die reale Implementierung eines externen Dienstes durch ein Mock-Objekt ersetzt werden
import { Effect } from "effect"
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>
b === 0
? Effect.fail(new Error("Cannot divide by zero"))
: Effect.succeed(a / b)
Das Effect-Ökosystem
- Die einzigartige Einsicht von Effect in Kombination mit weiteren Werkzeugen bildet ein reichhaltiges Bibliotheks-Ökosystem, mit dem sich komplexe Anwendungen einfach erstellen lassen
- Dinge, die früher unmöglich erschienen, sind heute selbstverständlich
- Das Effect-Ökosystem wächst schnell und kann auf GitHub von Effect eingesehen werden
Das Rad nicht neu erfinden
- In TypeScript-Anwendungscode werden oft dieselben Probleme immer wieder gelöst
- Die Interaktion mit externen Diensten, Dateisystemen und Datenbanken ist ein gemeinsames Problem für alle Anwendungsentwickler
- Effect bietet ein reichhaltiges Bibliotheks-Ökosystem mit standardisierten Lösungen für diese Probleme
- Ohne zahlreiche Abhängigkeiten installieren zu müssen, löst Effect viele Probleme auf einmal
Praktische Problemlösung
- Effect ist von Scala und Haskell inspiriert.
- Das Ziel von Effect ist jedoch, ein praktisches Toolkit bereitzustellen, das die alltäglichen Probleme beim Aufbau von TypeScript-Anwendungen und -Bibliotheken löst
Mit Spaß lernen
- Effect zu lernen macht Spaß
- Viele Entwickler lösen mit Effect in der Praxis reale Probleme
- Man kann zunächst nur Teile des Effect-Ökosystems einsetzen und nach und nach mehr Werkzeuge nutzen
- Anfangs mögen die Konzepte von Effect ungewohnt sein, aber wenn man sich Zeit nimmt, die Dokumentation zu lesen und die Kernkonzepte zu verstehen, hilft das später beim Einsatz fortgeschrittener Werkzeuge
- Die Effect-Community ist immer bereit, beim Lernen und Wachsen zu helfen. Siehe Discord oder GitHub
3 Kommentare
Es scheint eine ähnliche Ausrichtung zu haben wie das, was den Kern von Rust ausmacht.
Ich muss es wohl noch etwas länger nutzen, um das wirklich beurteilen zu können, aber im Vergleich zu
fp-tslässt es sich deutlich angenehmer verwenden.fp-tsentwickelt Version 3.0 nicht weiter und hat sich entschieden, sicheffectanzuschließen.Wenn Sie
fp-tsverwenden, lohnt es sich,effectin Betracht zu ziehen.https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts