Brauchen wir wirklich TypeScript im Jahr 2020?

machen Sie Javascript Java wieder

TypeScript ist zu einer der wichtigsten Fähigkeiten für einen modernen Webentwickler geworden. Im Jahr 2019 stieg er in die Top 10 der am häufigsten verwendeten Sprachen auf GitHub ein , seine Unterstützung wurde vollständig in die App "Reagieren erstellen" aufgenommen, und Sie können viele andere Beweise für die wachsende Beliebtheit finden. Gleichzeitig verlieren Sprachen wie Java und C weiter an Boden .

Wenn wir über die Vorteile von TypeScript sprechen, fällt uns normalerweise folgende Liste ein:

  • TypeScript unterstützt die statische Eingabe
  • TypeScript erleichtert das Lesen und Verstehen von Code.
  • TypeScript hilft, die vielen schmerzhaften Fehler zu vermeiden, die Entwickler normalerweise durch das Einchecken von Code machen
  • TypeScript ermutigt Entwickler, die besten OOP-Praktiken zu befolgen
  • Infolgedessen spart TypeScript Entwicklern Zeit

Interessanterweise werden alle Punkte auf dieser Liste ohne kritisches Auge als vertrauenswürdig angesehen. Heute schlage ich vor, dass Sie diese Punkte genauer betrachten und herausfinden, ob sie für uns wirklich so nützlich sind.

Da das Hauptziel von TypeScript darin besteht, die Anzahl der Fehler zu verringern, sollten wir uns überlegen, warum dies so wichtig ist. Die Antwort ist einfach: Je weniger Bugs - also je weniger Zeit wir für Entwickler und Tester aufwenden - wir werden ein lohnendes Produkt für weniger Geld erhalten und es wird anfangen, früher Einnahmen zu generieren.

Lassen Sie uns vor diesem Hintergrund herausfinden, wie TypeScript uns dabei helfen kann, unsere Produktivität und Effizienz zu verbessern.

Statische Eingabe - eine magische Tablette für Bugs?


Das Hauptmerkmal von TypeScript ist die Unterstützung der statischen Eingabe. Unter Entwicklern ist die Überzeugung weit verbreitet, dass die dynamische Typisierung die Ursache für fast alle Probleme ist, die JavaScript-Entwickler haben.

Ich frage mich, was für schlechte Leute an dynamischem Tippen zu finden sind. Warum stößt eine solche Kritik nicht auf andere dynamische Sprachen wie Python und Ruby? Ich kann nur davon ausgehen, dass das Problem weniger beim dynamischen Schreiben als beim Typgießen in JavaScript liegt. In der Tat kann es manchmal sehr unangenehm sein, Code wie diesen zu überraschen:

Konvertierung der Javascript-Typen

Dies ist jedoch eher ein Problem als eine schlechte Kenntnis von JavaScript und nicht der Sprache selbst. Stellen Sie sich vor, Sie haben einen leistungsstarken Sportwagen. Ihre fahrerischen Fähigkeiten sind jedoch mittelmäßig genug. Müssen Sie vom Autohersteller Änderungen verlangen, um die Höchstgeschwindigkeit des Autos zu verringern, oder lernen Sie fortgeschrittenes Fahren und werden Sie ein herausragender Profi? Was uns TypeScript bietet, ist, die Möglichkeiten des dynamischen Schreibens einzuschränken, anstatt JavaScript richtig zu lernen.

Eine andere Frage für Gegner des dynamischen Tippens ist, warum es bei so guter statischer Typisierung immer noch Fehler im in Java und C # geschriebenen Code gibt. Ja, wir können diese Fehler in der Kompilierungsphase abfangen, aber seien wir ehrlich, das ist nicht genug. Wir müssen SOLID-Prinzipien und andere bewährte Praktiken befolgen, um den Qualitätscode sicherzustellen. Und wieder - dies gilt mehr für die Kenntnisse und Qualifikationen der Programmierer als für die Programmiersprache.

Ist TypeScript-Code leichter zu lesen?


Hier sind 2 Beispiele für Redux Thunk:

const getUsers = async dispatch => { //... try { const users = await APIService.get('/users') dispatch(successGetUsers(users)) } catch(err) { dispatch(failedGetUsers(err)) } } 

und dasselbe bei TypeScript:

 const getUsers = (): ThunkAction<void, {}, {}, AnyAction> => async (dispatch: ThunkDispatch<{}, {}, AnyAction>) => { //... try { const users: User[] = await APIService.get('/users') dispatch(successGetUsers(users)) } catch(err) { dispatch(failedGetUsers(err)) } } 

Was bedeuten all diese Generika? Warum sind 2 leere Objekte in ihnen? Wie viel Zeit sollten wir mit dem Lesen der Dokumentation verbringen, um alles herauszufinden? Nun, das ist für Redux Thunk immer noch normal, da es sich bei Redux um eine sehr beliebte Middleware handelt, die über ein hervorragendes Support-Team und eine hervorragende Dokumentation verfügt. Aber was ist, wenn wir Code warten müssen, der all dies nicht enthält?

Es wird keine subtilen Fehler mehr geben?


Im vorherigen Beispiel haben Sie gesehen, wie TypeScript den Code ausführlicher macht. Wie Sie wissen, ist die Fehlerwahrscheinlichkeit umso höher, je größer und komplexer das System ist. Zusätzlich zu den Fehlern, die wir im JavaScript-Code machen könnten, müssen wir auch darauf achten, keine Tippfehler in den Schnittstellen, Fehler in den Generika usw. zu machen. Fairerweise sollte beachtet werden, dass der Compiler Ihnen dabei helfen wird, solche Fehler schnell zu finden und zu beheben, aber ohne TypeScript wären wir auf sie überhaupt nicht gestoßen.

Befolgen Sie die Best Practices von OOP


Wie wir wissen, müssen wir Best Practices befolgen, wenn wir hochwertigen, leicht skalierbaren und wartbaren Code schreiben möchten. Und TypeScript kann uns dabei helfen. Das hört sich toll an, schauen wir uns ein Beispiel von Express an:

userRoute.js

 router.get('/users', (req, res) => { //get users from DB res.json(users) }) router.post('/users', (req, res) => { //create user res.json(userCreated) }) 

userRoute.ts

 class UserRouter { public router = express.Router() public address = '/users' constructor() { this.initRoutes() } initRoutes() { this.router.get(this.address, this.getUsers) this.router.post(this.addressm this.createUser) } getUsers(req: express.Request, res: express.Response) { //get users from DB res.json(users) } createUser(req: express.Request, res: express.Response) { //create user res.json(userCreated) } } 

Das erste, was auffällt, ist, dass wieder mehr Code geschrieben wird. Wir verwenden Klassen, um im OOP-Stil zu schreiben. Wir müssen dann diese Klassen instanziieren. Darüber hinaus können Schnittstellen, statische Typen und andere Konstrukte verwendet werden. Und damit all dies nicht zu einem völligen Chaos wird, haben wir keine andere Wahl, als die besten Praktiken anzuwenden. Und das nennt man: "Entwickler ermutigen, die besten OOP-Praktiken anzuwenden . "

Als die Entwickler für einfache, flexible und dynamische Sprachen wie JavaScript und Python gestimmt haben, als das funktionale Programmierparadigma seine Vorteile und die Fähigkeit zeigte, einige Probleme eleganter und effizienter zu lösen (und in JavaScript können wir beide Ansätze verwenden), treibt uns TypeScript voran Code auf die altmodische Art und Weise im Stil von OOP Java und C # zu schreiben.

Zusammenfassend haben wir festgestellt, dass TypeScript nicht wirklich Zeit spart, uns weder vor einer großen Anzahl von Fehlern schützt noch unsere Produktivität erhöht. Darüber hinaus müssen Sie mehr Code schreiben, zusätzliche Konfigurations- und Typdefinitionsdateien erstellen und zusätzliche Dokumentationen lesen. Ein Neuling wird wahrscheinlich schreiben, vielleicht keine ideale, aber funktionierende Anwendung in JavaScript oder Ruby, während wir eine ausgezeichnete TypeScript-Anwendung nach allen Prinzipien schreiben werden. Und dann wird er uns beauftragen, sein Startup neu zu schreiben, wo wir TypeScript verwenden können, um alles richtig zu machen.

Es ist lustig zu sehen, wie massiv, wortreich und kompliziert Sprachen verschwinden, die nicht mit dynamischeren und einfacheren konkurrieren können. Letztere lehnen dann alles ab, was ihnen dabei geholfen hat, sich so schnell zu entwickeln, und bemühen sich, schwerer, wortreicher und komplizierter zu werden.

Ich sehe es so:
Okay, wir wollen kein Java mehr, wir wollen JavaScript. Wir mögen JavaScript jedoch nicht so wie es ist. Machen wir es also ein bisschen mehr wie Java. Großartig, jetzt haben wir alles, was in Java war, und dies ist nicht Java. Lass uns gehen!

Source: https://habr.com/ru/post/de482702/


All Articles