Sytuacja kobiet w IT w 2024 roku
30.09.20204 min
Michael Krasnov

Michael KrasnovCTOYourTable

Dlaczego nie warto używać TypeScript

Dowiedz się, dlaczego nie warto używać TypeScriptu oraz kiedy JavaScript jest lepszy.

Dlaczego nie warto używać TypeScript

Czy jest tu ktoś, kto nie lubi TypeScript? Język ten „rozwiązuje” wiele problemów, które ma JS. Można powiedzieć, że jest jego „nadzbiorem” i sprawi, że Twój kod będzie mniej podatny na błędy i bardziej przyjemny do czytania. Istnieje wiele powodów, dla których warto używać TypeScript, ale ja Wam zaraz podam 7 naprawdę dobrych powodów, aby tego nie robić.

Używanie TypeScriptu jest ryzykowne

Ale jak to? TypeScript dodaje przecież definicje typu i sprawdza je w czasie kompilacji. Czy integracja z IDE ostrzeże Cię o wszelkich niezgodnościach typów? No właśnie. TypeScript sprawdzi tylko typy w czasie kompilacji i tylko te, które są dostępne. Wywołania sieciowe, biblioteki systemowe, API specyficzne dla platformy i zewnętrzne biblioteki bez określonego typu nie mogą się komunikować z TypeScript.

I w momencie, w którym przyzwyczaisz się do tego, że coś innego sprawdza za Ciebie typy i nie musisz w pełni rozumieć kodu, który piszesz, to błędy pojawią się prędzej, niż Ci się wydaje. W JS niczego nie zakładasz i sprawdzasz konkretną wartość zmiennej, aby upewnić się, że jest taka, jakiej oczekujesz. Co więcej, raczej nie dbasz o jej konkretny typ. W TS polegasz na kompilatorze, który zrobi to za Ciebie, ale zrobi tylko tyle. Możesz połączyć te dwa sposoby, ale jaki to wszystko ma sens?

Jeśli najpierw piszesz definicje, a potem kod, dzięki któremu upewnisz się, że zgadzają się również w czasie wykonania, to po co w ogóle je pisać?

Jest niechlujny

Kolejny paradoks: język, który miał nam dać przejrzystość i czytelność kodu, tak naprawdę sprawia, że jest on niejasny. Widać to na przykładzie poniższych bibliotek open-source:

// TODO: do this more elegantly
;((currentReducer as unknown) as Reducer<
  NewState,
  NewActions
>) = nextReducer


Powyższy kod pochodzi z biblioteki Redux. Jedyne, co te 4 wiersze robią, to przypisanie nextReducer do currentReducer.

// HACK: Since TypeScript inherits static properties too, we have to
// fight against TypeScript here so Subject can have a different static create signature
/**
  * Creates a new cold Observable by calling the Observable constructor
  * @static true
  * @owner Observable
  * @method create
  * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor
  * @return {Observable} a new cold observable
  * @nocollapse
  * @deprecated use new Observable() instead
  */
static create: Function = <T>(subscribe?: (subscriber: Subscriber<T>) => TeardownLogic) => {
   return new Observable<T>(subscribe);
}


Następny przykład pochodzi z biblioteki RxJS. Wydaje mi się, że jeśli mam walczyć z narzędziem, które ma mi pomóc, to nie sądzę, żeby było ono dobre.

Nie rozwiązuje problemów JS

Mówi się, że TypeScript miał rozwiązać problemy JavaScriptu. Ale tego nie robi. Dynamiczne typowanie nigdy nie było problemem w JS. Problem był z takimi rzeczami, jak NaN === NaN, które jest false; to, że średniki są opcjonalne lub nie; nową linią, która zmienia obiekt w blok i lukier składniowy zamiast prawdziwego OOP.

TypeScript nie robi nic, aby je rozwiązać, ale wprowadza kolejny standard, jeszcze bardziej dzieląc społeczność JS.

Nawet zakładając, że brak typów w JS jest problemem, to TypeScript też go nie rozwiązuje. Problem typowania natomiast rozwiązują Java, C, C# i inne języki kompilowane. Mogą one zagwarantować silne typowanie w czasie kompilacji i wykonywania. Języki interpretowane po prostu nie są do tego zdolne.

To nie jest nadzbiór, tylko podzbiór

TypeScript to coś, co kompiluje się do JavaScript, więc z definicji nie może być nadzbiorem. Ogranicza to, co możesz zrobić z JavaScriptem i sprawia, że jego mocne strony nie są widoczne. Jeśli naprawdę chcesz być świetnym programistą, nie zadowalaj się pocieszającym kłamstwem i spróbuj zrozumieć, w czym JS naprawdę jest mocne.

Jest open-source, ale nic z tego nie wynika

Wielu mówi, że TypeScript warto używać, bo jest open-source. To prawda, kompilator TS jest rozpowszechniany na licencji MIT. Nadal jest on jednak kontrolowany przez Microsoft, a jego postęp w otwartym oprogramowaniu to nic innego jak ruch marketingowy. Nie mylić open-source z demokracją.

Microsoft może zrobić z TypeScriptem, co chce, a my możemy się temu jedynie przyglądać. Z drugiej strony JS jest zarządzany przez międzynarodowy komitet, który niczego nie zmieni bez zgody społeczności.

Ale duże firmy też go używają…

Nie mogę uwierzyć, że niektórzy uważają to za dobry argument. Duże firmy wykorzystują też przestarzałe technologie i czasem dopuszczają się oszustw podatkowych... Dlaczego to, że używają TypeScript to nagle dobry przykład?

Ale TypeScript ma więcej funkcji…

Już nie. To prawda, że kiedy TypeScript pojawił się po raz pierwszy w 2012 roku, miał np. klasy, których nie było wtedy w JS. Jednak od tamtej pory JS bardzo się rozwinął i TS z trudem za nim nadąża. Jeśli czegoś brakuje w JS, to jest do tego wtyczka babel.


Oryginał tekstu w języku angielskim możesz przeczytać tutaj.

<p>Loading...</p>