Migration von React JS zu TypeScript Teil 1: sichere Projekt-Einrichtung
Strenge Flags, tsconfig-Struktur sowie modulweise Konvertierung, die sicherstellt, dass die Anwendung weiterhin bereitgestellt werden kann.
Dieser Leitfaden erstellt erneut einen praktikablen Weg für die Migration der React-App von JavaScript zu TypeScript (Teil 1): Einrichtung ohne Störungen. Der Fokus liegt auf Verträgen, Überprüfungen sowie Code, den man ohne Rückschluss auf die Absicht in ein Repository einfügen kann.
Warum Sie sich für die Migration entschieden haben
Zu Warum Sie sich für die Migration entschieden haben sollten Sie die Eingabedaten, den Verantwortlichen für den Schritt sowie die Abbruchkriterien vor der Codeänderung definieren. Die Ausführenden sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen. Ziehen Sie kleine, testbare Einheiten vor großen Skripten. Wenn ein Schritt fehlschlägt, sollte der Fehler auf eine einzige Verantwortung verweisen und nicht auf ein verworrenes Ablaufverfahren. Migrieren Sie Modul für Modul unter Verwendung von Strenge-Flags, die bei jeder neuen Nutzung im CI-Fehler auslösen.
Schritt 1: TypeScript installieren
Zu Schritt 1: Installieren Sie TypeScript, definieren Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien, bevor Sie den Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen. Betrachten Sie diese Phase als Vertrag zwischen den Eingaben und den validierten Ausgaben. Benennen Sie die Artefakte, definieren Sie Erfolgskontrollen und lehnen Sie stille, teilweise abgeschlossene Vorgänge ab. Migrieren Sie Modul für Modul unter Verwendung von Strenge-Flags, die bei jeder neuen Nutzung im CI zu Fehlern führen.
npm install -D typescript @types/react @types/react-dom @types/node
--save-dev
Warum als Entwicklungskomponenten installieren?
Zu der Frage „Warum sollten sie als Entwicklungskomponenten installiert werden?“ sollten vor dem Ändern des Codes die Eingabedaten, der Verantwortliche für den Schritt sowie die Abbruchkriterien definiert werden. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zuständen schließen zu müssen. Zeiten und Kosten sollten neben den funktionalen Ergebnissen aufgezeichnet werden. Frühzeitige Sichtbarkeit verhindert überraschende Rechnungen, wenn der Weg von einer Demo-Umgebung in gemeinsam genutzte Umgebungen wechselt. Migrieren Sie die Module schrittweise unter Verwendung von Prüfflaggen, die bei jeder neuen Nutzung einen CI-Fehler verursachen.
Eine einfache Faustregel
Als einfaches Faustregel kann man sagen: Definieren Sie vor dem Ändern des Codes die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Bewahren Sie die Konfiguration außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher und Feature-Flags sollten an einem Ort gesammelt sein, den die Operator überprüfen können, ohne den gesamten Ablauf durchzulesen. Migrieren Sie Modul für Modul unter Verwendung von Strenge-Flags, die bei jeder neuen Nutzung eine CI-Fehlermeldung auslösen.
Schritt 2: Erstellen Sie die TypeScript-Konfiguration
Zur Schritt 2: Erstellen Sie die TypeScript-Konfiguration, definieren Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien, bevor Sie Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen. Dokumentieren Sie gemeinsam den erfolgreichen Ablauf sowie den Notfallweg. Wiederholte Versuche, menschliche Überprüfungen und die Handhabung von Fehlern gehören zum Produkt selbst und nicht zu späteren Optimierungen. Migrieren Sie Modul für Modul unter Verwendung von Strenge-Flags, die bei jeder neuen Verwendung von „any“ den CI-Test scheitern lassen. Zur Schritt 2: Erstellen Sie die TypeScript-Konfiguration, definieren Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien, bevor Sie Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen. Betrachten Sie diese Phase als Vertrag zwischen den Eingaben und den validierten Ausgaben. Benennen Sie die Artefakte, definieren Sie Erfolgskontrollen und lehnen Sie stille, unvollständige Abschlüsse ab.
npx tsc --init
Schritt 3: TypeScript für eine schrittweise Migration konfigurieren
Zum Schritt 3: TypeScript für eine schrittweise Migration konfigurieren, definieren Sie die Eingaben, den Verantwortlichen für diesen Schritt sowie die Abbruchkriterien, bevor Sie Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zuständen schließen zu müssen. Erhalten Sie Zeitenangaben und Kosten neben den funktionalen Ergebnissen. Frühe Sichtbarkeit verhindert überraschende Rechnungen, wenn der Weg von einer Demo-Umgebung in gemeinsam genutzte Umgebungen wechselt. Verwenden Sie bei Benutzeroberflächen, die später von KI-Tools bearbeitet werden sollen, lieber Komposition statt Vererbung.
{
"allowJs": true,
"checkJs": false,
"noEmit": true
}
Was bewirken diese Optionen?
Zu der Frage „Wozu dienen diese Optionen?“: Definieren Sie die Eingabedaten, den Eigentümer des Schritts sowie die Abbruchkriterien, bevor Sie Code ändern. Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen. Bewahren Sie Konfigurationen außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher und Feature-Flags sollten an einem Ort gesammelt sein, den Operator überprüfen können, ohne den gesamten Codeverlauf durchlesen zu müssen. Verwenden Sie bei UI-Oberflächen, die später von KI-Tools bearbeitet werden sollen, lieber Komposition statt Vererbung.
Schritt 4: main.jsx in main.tsx migrieren
Zur Schritt 4: Migrieren Sie main.jsx in main.tsx und definieren Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien, bevor Sie den Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen. Dokumentieren Sie gemeinsam den erfolgreichen Ablauf sowie den Notfallweg. Wiederholungsversuche, menschliche Überprüfungen und die Handhabung von Fehlern gehören zum Produkt selbst und nicht zu späteren Optimierungen. Verwenden Sie bei Benutzeroberflächen, die später von KI-Tools bearbeitet werden sollen, lieber Komposition statt Vererbung.
1. CSS-Imports
Für 1. CSS-Imports sollten die Eingabedaten, der Verantwortliche für den Schritt sowie die Abbruchkriterien vor dem Ändern des Codes definiert werden. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Wählen Sie kleine, testbare Einheiten statt umfangreicher Skripte. Wenn ein Schritt fehlschlägt, sollte der Fehler auf eine einzige Verantwortung verweisen und nicht auf ein verworrenes Ablaufverfahren. Für UI-Oberflächen, die später von KI-Tools bearbeitet werden, bevorzugen Sie Komposition statt Vererbung.
import "./index.css";
/// <reference types="vite/client" />
import "./index.css";
import logo from "./logo.svg";
2. Umgang mit optionalen Werten
Zum zweiten Punkt: Bei der Handhabung von optionalen Werten sollten Eingaben, der Verantwortliche für den Schritt sowie die Abbruchkriterien vor dem Ändern des Codes definiert werden. Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen. Betrachten Sie diese Phase als Vertrag zwischen den Eingaben und den validierten Ausgaben. Benennen Sie die Artefakte, definieren Sie Erfolgskontrollen und lehnen Sie stille, unvollständige Abschlüsse ab. Verwenden Sie bei UI-Oberflächen, die später von KI-Tools bearbeitet werden sollen, lieber Komposition statt Vererbung.
document.getElementById("root")
HTMLElement | null
document.getElementById("root")!
<div id="root"></div>
const rootElement = document.getElementById("root");
if (rootElement) {
createRoot(rootElement).render(<App />);
}
Warum dieser Ansatz funktioniert hat
Für Warum dieser Ansatz funktioniert hat sollten Sie die Eingabedaten, den Verantwortlichen für den Schritt sowie die Abbruchkriterien vor der Codeänderung definieren. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Notieren Sie die Laufzeiten und Kosten neben den funktionalen Ergebnissen. Frühzeitige Sichtbarkeit verhindert überraschende Rechnungen, wenn der Weg von einer Demo-Umgebung in gemeinsam genutzte Umgebungen wechselt. Wählen Sie bei UI-Oberflächen, die später von KI-Tools bearbeitet werden sollen, lieber Komposition statt Vererbung.
Was Sie gelernt haben
Für das Gelernte sollten Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien vor dem Ändern des Codes definieren. Operator:innen sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Bewahren Sie Konfigurationen außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher und Feature-Flags sollten an einem Ort gesammelt sein, den Operator:innen überprüfen können, ohne den gesamten Ablaufverlauf durchlesen zu müssen. Verwenden Sie bei UI-Oberflächen, die später von KI-Tools bearbeitet werden sollen, lieber Komposition statt Vererbung.
Zusammenfassung
Zum Abschluss sollten Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien definieren, bevor Sie Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Dokumentieren Sie sowohl den erfolgreichen Ablauf als auch den Notfallweg gemeinsam. Wiederholungsversuche, menschliche Überprüfungen sowie die Handhabung von Fehlern gehören zum Produkt selbst und nicht zu späteren Optimierungen. Verwenden Sie bei UI-Oberflächen, die später von KI-Tools bearbeitet werden sollen, lieber Komposition statt Vererbung. Zum Abschluss sollten Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien definieren, bevor Sie Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Betrachten Sie diese Phase als Vertrag zwischen den Eingaben und den validierten Ausgaben. Benennen Sie die Ergebnisdokumente, definieren Sie Erfolgskontrollen und lehnen Sie stille, unvollständige Abschlüsse ab.
Probieren Sie PrepFlow aus
Zur Vorbereitung von PrepFlow sollten Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien vor dem Ändern des Codes definieren. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Erfassen Sie die Laufzeiten und Kosten zusammen mit den funktionalen Ergebnissen. Frühzeitige Sichtbarkeit verhindert überraschende Rechnungen, wenn der Ablauf von einer Demo-Umgebung in eine gemeinsam genutzte Umgebung wechselt. Platzieren Sie Typen zusammen mit Komponenten und halten Sie die Eigenschaften begrenzt. Zu umfangreiche Eigenschaftensätze führen zu den Schulden, die TypeScript eigentlich verhindern soll.
Operative Checkliste
Zur operativen Checkliste sollten Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien vor dem Ändern des Codes definieren. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen.
Ziehen Sie kleine, testbare Einheiten vor großen Skripten vor. Wenn ein Schritt fehlschlägt, sollte der Fehler auf eine einzige Verantwortung verweisen und nicht auf einen verworrenen Ablauf.
Platzieren Sie Typen zusammen mit Komponenten und halten Sie die Props eng gefasst. Umfangreiche Prop-Listen führen zu den Schulden, die TypeScript verhindern soll.
Schreiben Sie ein kurzes Handbuch: Wie man Schlüssel rotiert, wie man die Warteschlange leert und wie man die letzte Änderung rückgängig macht.
Betrachten Sie diese Phase als Vertrag zwischen Eingaben und validierten Ausgaben. Benennen Sie die Artefakte, definieren Sie Erfolgskontrollen und lehnen Sie stille, unvollständige Abschlüsse ab.
Platzieren Sie Typen zusammen mit Komponenten und halten Sie die Props eng gefasst. Umfangreiche Prop-Listen führen zu den Schulden, die TypeScript verhindern soll.
Vor der Weiterentwicklung des Stacks sollten Sie Versionen einfrieren, ein „goldenes Protokoll“ für den kritischen Weg erstellen und die Schritte zur Rücksetzung überprüfen. Gemeinsame Umgebungen benötigen Rate Limits, Überprüfungen der Zuordnung sowie einen klaren Verantwortlichen für die Rotation von Geheimnissen. Wählen Sie langweilige Zuverlässigkeit statt cleverer, einmaliger Demonstrationen.