Wartości programisty TypeScript

2026-09-10

TypeScript to mój główny język. Z czasem przestał być jedynie wyborem technologicznym, a stał się zestawem wartości. Nie chodzi o reguły z przewodnika stylu, lecz nawyki decydujące o tym, czy po dwóch latach i dołączeniu trzech nowych programistów nadal przyjemnie będzie zmieniać bazę kodu.

Uczciwość ponad wygodę. Tryb strict jest włączony od pierwszego commitu. any to sygnał błędu, a nie typ; gdy naprawdę nie znam kształtu danych, używam unknown i stopniowo zawężam typ. Typ, który kłamie — na przykład rzutowanie as uciszające kompilator — jest gorszy niż brak typu, bo cały dalszy kod mu ufa. Gdy kompilator narzeka, zwykle ma rację; poprawić trzeba dane, nie adnotację.

Uczyń stany niemożliwe niemożliwymi. Zamiast trzech flag isLoading, isError i data, które mogą sobie przeczyć, stosuję unię rozłączną: idle, loading, success z danymi i error z przyczyną. Tak samo w modelu domenowym: opłacone zamówienie ma paymentId, nieopłacone nie. switch z wyczerpującą kontrolą never zmienia zapomniany przypadek z incydentu produkcyjnego w czerwony błąd w edytorze.

Ufaj wewnątrz, sprawdzaj na granicach. Typy znikają w czasie działania, dlatego wszystko, co przekracza granicę — treść HTTP, webhook, formularz, localStorage czy odpowiedź LLM — parsuję przez Zod lub podobny schemat, z którego wyprowadzam typ. Jedno źródło prawdy zapobiega rozbieżności między walidacją a tym, w co wierzymy. W aplikacji typowane dane przepływają bez defensywnych kontroli w każdej linijce.

Dziel się kontraktami, nie domysłami. W produkcie full-stack typy API są generowane lub współdzielone przez OpenAPI, GraphQL Codegen, Prisma albo wspólny pakiet. Dzięki temu zmiana nazwy pola psuje build, a nie proces płatności. Czytelność jest ważniejsza od sprytu: prosty interface, który nowa osoba rozumie w dziesięć sekund, jest cenniejszy niż pięciopoziomowy conditional type mający dowieść, że przeczytałem podręcznik. Generics służą ponownemu użyciu, nie popisom.

Typy nie zastępują testów, code review ani myślenia — obniżają koszt każdego z nich. Na tym polega prawdziwa wartość programisty TypeScript: nie na znajomości każdego utility type, lecz na pozostawieniu kodu, który następna osoba może zmieniać z pewnością. Jeśli twoja baza jest pełna any, a zespół boi się refaktoryzacji, prześlij mi moduł, którego nikt nie chce ruszać. Pokażę, jak bym go otypował i co udałoby się dzięki temu wykryć.

Daj kolejnemu produktowi kogoś, kto zostanie.

Chcesz zacząć? Napisz do mnie — mogę rozpocząć od razu i zostać na dłużej. Długoterminowa współpraca, nie przekazanie projektu po dwóch tygodniach. Omówmy projekt, wymagania i najlepszy sposób realizacji.

Zapytaj o doświadczenie lub usługi