Moja przygoda z TypeScriptem

Zacząłem swój pierwszy projekt pisany w TypeScript. Będzie to silnik do gier.

Dlaczego teraz? Dlaczego TS? Czyż nie byłem do TypeScripta negatywnie nastawiony?

Cofnijmy się wstecz. Od kilku lat stykam się z TypeScriptem w różnych projektach i niestety nie były to przyjemne spotkania. Ciągle odnosiłem wrażenie, że w TypeScript piszą ludzie, którzy nie mają pojęcia o JS. Przychodzą tacy z ce-krzyżyka czy innej dżawy i chcą pisać w JS tak, jak pisali w swoich językach.

I niestety to była prawda. TypeScript ma pewne zalety, ale jednak ludzie tego nadużywają (typowania, klas itp.). Sprawiają, że kod staje się nieczytelny i mało elastyczny. Często miałem wrażenie, że TypeScript mnie ogranicza. Znam statyczne typowanie z C++ czy Pascala/Delphi, więc powrót do niego wydawał mi się krokiem wstecz.

Co się jednak zmieniło?

Po pierwsze - TypeScriptu nie da się lekceważyć, bo jest mega popularny. Więc mając z nim styczność w różnych projektach, sięgałem też po dokumentację, robiłem HelloWorldy, ogólnie zaciekawiłem się jakoś, chociaż wpierw z daleka.

Po drugie - w międzyczasie zacząłem się interesować Rustem, tym superanckim językiem, co jest jednocześnie niszowy i hipsterski jak i dużo o nim słychać. Dużo można mówić o Ruście, ale powiem tylko tyle, że Rust jest fajny. Kompiluje się do kodu natywnego, ale też do WebAsembly, więc można odpalać na stronie. Wieloplatformowy. W sam raz do silnika gier!

Przez większość czasu nie trzeba w Ruście pisać typów, bo jest inferencja, więc same się typy wymyślają. Na dodatek statyczne typowanie sprawiają, że programowanie jest większym wyzwaniem, więc jest to przyjemne. JavaScript był ostatnio dla mnie zbyt łatwy. A Rust podnosił poprzeczkę. Na dodatek dawał pewność, że jak się kompiluje, to działa. No dobra, może nie do końca, ale ogólnie przenosił ciężar rozwiązywania błędów z czasu uruchomienia na czas kompilacji.

Jednak pisanie w Rust ma dla mnie te wady, że po pierwsze nie znam tego języka tak dobrze jak JS, więc piszę w nim wolniej, bardziej niepewnie. Po drugie integracja z resztą przeglądarkowego kodu jest trochę utrudniona jeśli się używa WebAssembly.

To sprawiło, że postanowiłem jednak napisać ten silnik najpierw w JavaScript, a później ew. przepisać do Rust.

I tutaj wchodzi TypeScript, cały na biało. Ponieważ pisząc w nim, dalej piszesz w JavaScript (nie oszukujmy się, TypeScript to nie jest oddzielny język, tylko nakładka/rozszerzenie/zestaw ograniczeń na JS), a z drugiej strony zachowujesz dyscyplinę typów, co później pozwoli mi na sprawniejsze ewentualne przepisanie tego na Rust, który też jest statycznie typowany.

I jak moje wrażenia?

Cóż, całkiem przyjemnie się pisze. Nawet nie muszę wiele typować, bo TS albo robi inferencję typów (jak w Rust) albo po prostu pozwala mi na pisanie słabo typowane (jak w JS). Typowanie w wielu miejscach jest opcjonalne, TypeScript na dużo pozwala.

Dwa, że jak już coś zatypuję, to później jest radość, jak VSCode mi coś fajnie podpowiada. Myślę, że to właśnie ludzi pcha do TypeScripta. Że więcej zabawy jest w programowaniu.

No i wyzwanie. Czasem trzeba pokombinować, użyć generyka czy jakiejś nietypowej opcji w TypeScript. Trochę jak w Rust, chociaż łatwiej.

Czyli ogólnie na plus. Tylko, że robiąc coś samemu i po swojemu, mogę używać tego TypeScript w rozsądny sposób. Nadal nie mam zaufania do ludzi, którzy pakują TypeScript wszędzie i zaciemniają kod i robią z JSa drugą dżawę. Wydaje mi się, że TypeScripta też trzeba umieć używać. I tutaj mam trochę przewagi, choćby dlatego, że pisałem wcześniej w Rust (podobny temat), a od Javy trzymałem się z daleka, więc nie wpłynie negatywnie na mój styl pisania. Poza tym ogólnie umiem rozkminiać języki programowania. Czyli jest spore prawdopobieństwo, że rozkminię i TypeScript.

Komentarze

Popularne posty z tego bloga

Dlaczego nie da się nadgonić frontendu

Absurdy Rekrutacji 2023

Przygody juniora (1)