200 tysięcy linii JavaScriptu do przeniesienia na TypeScript strict
Aplikacja ma 200 tys. linii JS, 12 programistów i ciągły rozwój funkcji. Zarząd zgodził się na TypeScript, ale nie na zatrzymanie prac. Część zespołu chce od razu włączyć strict, część uważa, że TS ich spowolni.
Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.
Moje rozwiązanie
Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.
Pokaż, czego szuka rekruter, i modelową odpowiedź
Co sprawdza rekruter
- Czy planujesz migrację przyrostową z mierzalnym postępem
- Czy znasz ustawienia kompilatora, które to umożliwiają
- Czy umiesz przekonać zespół i ustalić zasady
Odpowiedź seniora
Start: tsconfig z allowJs i checkJs: false, strict: true od pierwszego dnia, ale tylko dla plików .ts. Nowe pliki powstają w TS, a zmieniane przy okazji pracy są przenoszone. Dzięki temu nie ma długu „luźnego TS”, który trzeba będzie zaostrzać drugi raz.
Kolejność migracji: najpierw warstwy, od których zależy najwięcej kodu (klient API, modele domenowe, utils), bo dają typy reszcie. Typy z API generuję z OpenAPI, zamiast pisać ręcznie. Tam, gdzie typ jest trudny, dopuszczam jawne // @ts-expect-error z komentarzem i ticketem zamiast any. Zakaz nowych any pilnuje ESLint (@typescript-eslint/no-explicit-any jako error dla nowych plików).
Postęp mierzę skryptem: procent plików TS i liczba ts-expect-error, widoczne na dashboardzie. Typecheck w CI jest wymagany od pierwszego dnia. Zespołowi daję krótkie warsztaty, wzorcowe pliki i parowanie przy pierwszych migracjach. Po 3 miesiącach checkJs dla pozostałych plików, żeby złapać najgroźniejsze błędy.
Typowe wpadki
- Włączenie strict globalnie i 8 tysięcy błędów na start
- Masowe dodanie any, żeby się kompilowało
- Migracja jako osobny projekt, który zatrzymuje rozwój
Dopytają o
- Co zrobisz z bibliotekami bez typów?
- Jak migrujesz komponenty React z propTypes?
- Jak przekonasz osobę, która uważa, że TS spowalnia?