
Bevor ich anfange, möchte ich erwĂ€hnen, dass ich ein TypeScript-Fan bin. Dies ist meine Hauptprogrammiersprache fĂŒr Front-End-Projekte in React und fĂŒr alle Back-End-Arbeiten, die ich in Node mache. Ich bin komplett fĂŒr Typescript, aber es gibt Momente, die mich stören und ĂŒber die ich diesen Artikel erzĂ€hlen wollte.
Ich habe in den letzten drei Jahren fĂŒr viele verschiedene Unternehmen ausschlieĂlich ĂŒber TypeScript geschrieben. Meiner Meinung nach macht TypeScript also zumindest etwas richtig oder schlieĂt bestimmte Anforderungen.
Trotz seiner UnzulÀnglichkeiten ist TypeScript in das Mainstream-Entwicklungs-Frontend
eingestiegen und belegt laut dem
HackerRank-Kompetenzbericht den siebten Platz in der Liste der beliebtesten Programmiersprachen.
Jedes Entwicklerteam, egal ob groĂ oder klein, das in TypeScript schreibt oder nicht, ist aus SicherheitsgrĂŒnden immer die MĂŒhe wert:
- Stellen Sie sicher, dass gut geschriebene Komponententests so viel Code wie möglich in der Produktion abdecken.
- Verwenden Sie die Paarprogrammierung: Ein zusÀtzliches Paar Augen hilft dabei, schwerwiegendere Dinge als nur Syntaxfehler zu erkennen
- Erstellen Sie qualitativ einen CodeĂŒberprĂŒfungsprozess und identifizieren Sie Fehler, die der Computer nicht finden kann
- Verwenden Sie Linter - wie zB Eslint
Obwohl TypeScript zusĂ€tzlich eine zusĂ€tzliche Sicherheitsstufe hinzufĂŒgt, liegt es meiner Meinung nach in dieser Hinsicht weit hinter anderen Sprachen zurĂŒck. Ich werde erklĂ€ren warum.
TypeScript ist kein zuverlÀssiges Typsystem
Ich denke, dies ist möglicherweise das Hauptproblem bei TypeScript, aber lassen Sie mich zunÀchst herausfinden, was
zuverlÀssige und
unzuverlÀssige Typsysteme sind .
Robustes Typensystem
Ein zuverlĂ€ssiges Typensystem stellt sicher, dass Ihr Programm nicht in ungĂŒltige ZustĂ€nde gerĂ€t. Wenn der statische Typ eines Ausdrucks beispielsweise eine
Zeichenfolge ist und zur Laufzeit ausgewertet wird, erhalten Sie garantiert nur eine
Zeichenfolge .
In einem zuverlĂ€ssigen Typsystem werden Sie weder zur Kompilierungszeit noch zur Laufzeit in einer Situation sein, in der der Ausdruck nicht mit dem erwarteten Typ ĂŒbereinstimmt.
NatĂŒrlich gibt es verschiedene Grade an ZuverlĂ€ssigkeit sowie verschiedene Interpretationen von ZuverlĂ€ssigkeit. TypeScript ist einigermaĂen zuverlĂ€ssig und fĂ€ngt Tippfehler ab:
Unsicheres Typensystem
Maschinenschrift meldet absolut offen, dass 100% ige ZuverlÀssigkeit nicht sein Zweck ist. Sogar die "Nicht-Ziel" -Nummer 3 in der
TypeScript -Liste "Nicht-Ziel" besagt eindeutig:
Ein zuverlĂ€ssiges oder ânachweislich korrektesâ Typensystem zu haben, ist nicht unser Ziel. Stattdessen bemĂŒhen wir uns um ein Gleichgewicht zwischen Genauigkeit und Leistung.
Dies bedeutet, dass es keine Garantie dafĂŒr gibt, dass die Variable zur Laufzeit von einem bestimmten Typ ist. Ich kann dies anhand des folgenden, etwas erfundenen Beispiels veranschaulichen:
interface A { x: number; } let a: A = {x: 3} let b: {x: number | string} = a; bx = "unsound"; let x: number = ax;
Der obige Code funktioniert nicht, da bekannt ist, dass
ax eine Zahl aus der Schnittstelle
A ist. Leider verwandelt es sich nach ein paar Finten mit Neuzuweisung in einen String und dieser Code wird kompiliert, jedoch mit Fehlern zur Laufzeit.
Leider kompiliert dieser Ausdruck ohne Fehler:
axtoFixed(0);
Dass ZuverlĂ€ssigkeit nicht das Ziel der Sprache ist, ist wahrscheinlich eines der gröĂten Probleme von TypeScript. Ich
bekomme zur Laufzeit immer wieder viele Laufzeitfehler, die der
tsc- Compiler nicht
abfĂ€ngt , aber die der Compiler bemerkt hĂ€tte, wenn ein zuverlĂ€ssiges Typsystem in TypeScript existiert hĂ€tte. TypeScript ist jetzt ein FuĂ im Lager der "zuverlĂ€ssigen" Sprachen und der andere FuĂ im Lager der "unzuverlĂ€ssigen". Dieser Ansatz mit halben MaĂen basiert auf
jedem Typ, den ich spÀter erörtern werde.
Ich bin frustriert darĂŒber, dass die Anzahl der Tests, die ich schreibe, mit dem Ăbergang zu TypeScript nicht abgenommen hat. Als ich gerade anfing, entschied ich fĂ€lschlicherweise, dass ich die lĂ€stige Routine reduzieren könnte, eine groĂe Anzahl von Unit-Tests zu schreiben.
TypeScript stellt den aktuellen Stand der Dinge in Frage, indem es argumentiert, dass die Senkung der kognitiven Kosten bei der Verwendung von Typen wichtiger ist als die ZuverlÀssigkeit.
Ich verstehe, warum TypesScript einen solchen Pfad gewÀhlt hat und es gibt eine Meinung, dass TypeScript nicht so beliebt wÀre, wenn die ZuverlÀssigkeit des Typsystems zu 100% garantiert wÀre. Diese Meinung hat sich nicht bewÀhrt -
die Dart-Sprache gewinnt zusam- men mit der weit verbreiteten Verwendung von Flutter rasch an Beliebtheit. Und
es wird argumentiert, dass TypzuverlÀssigkeit das Ziel von Dart ist.
Die Unsicherheit und die verschiedenen Möglichkeiten, die TypeScript bietet, machen es weniger effizient und im Moment leider nur
"besser als nichts" . Ich wĂŒrde mich freuen, wenn mit zunehmender Beliebtheit von TypeScript mehr Compiler-Optionen verfĂŒgbar werden und erfahrene Benutzer nach 100% iger ZuverlĂ€ssigkeit streben können.
TypeScript garantiert keine TypprĂŒfung zur Laufzeit
Die TypprĂŒfung zur Laufzeit ist nicht der Zweck von TypeScript, daher wird mein Wunsch wahrscheinlich niemals in ErfĂŒllung gehen. Die LaufzeitĂŒberprĂŒfung ist beispielsweise hilfreich, wenn Sie mit JSON-Daten arbeiten, die von API-Aufrufen zurĂŒckgegeben wurden. Es wĂ€re möglich, eine ganze Kategorie von Fehlern und viele Komponententests loszuwerden, wenn wir diese Prozesse auf der Ebene des Typsystems steuern könnten.
Da wir zur Laufzeit nichts garantieren können, kann dies leicht passieren:
const getFullName = async (): string => { const person: AxiosResponse = await api();
Es gibt einige Hilfsbibliotheken wie
io-ts , was groĂartig ist, aber das kann bedeuten, dass Sie Ihre Modelle duplizieren mĂŒssen.
Furchterregende Art irgendeine und strenge Wahl
Der Typ any bedeutet "any", und der Compiler ermöglicht die Operation oder Zuweisung einer Variablen dieses Typs.
TypeScript funktioniert gut fĂŒr kleine Dinge, aber die Leute neigen dazu, den Typ auf etwas zu setzen, das lĂ€nger als eine Minute dauert. Ich habe kĂŒrzlich an einem Angular-Projekt gearbeitet und eine Menge Code wie diesen gesehen:
export class Person { public _id: any; public name: any; public icon: any;
Mit TypeScript können Sie das Typsystem vergessen.
Sie können die Art von allem mit
jedem brechen:
("oh my goodness" as any).ToFixed(1);
Die Option
strict enthÀlt die folgenden Compiler-Optionen, die alles zuverlÀssiger machen:
- --strictNullChecks
- --noImplicitAny
- --keinimpliziertesDies
- - immerStrict
Es gibt auch eine Regel fĂŒr eslint
@ typescript
-eslint / no-explicit-any .
Das Verteilen von Code kann die ZuverlÀssigkeit Ihres Codes beeintrÀchtigen.
Fazit
Ich muss wiederholen, dass ich ein TypeScript-Fan bin und es in meiner tĂ€glichen Arbeit verwende, aber ich habe das GefĂŒhl, dass es unvollkommen ist und der Rummel darum nicht ganz gerechtfertigt ist. Airbnb
behauptet, TypeScript habe dazu beigetragen, 38% der Fehler zu vermeiden . Ich bin sehr skeptisch in Bezug auf den so genau angegebenen Prozentsatz. TypeScript verbessert oder kombiniert nicht alle vorhandenen Methoden fĂŒr guten Code. Ich muss noch eine Menge Tests schreiben. Man könnte argumentieren, dass ich mehr Code schreibe, also muss ich so viele Tests schreiben. Ich bekomme immer wieder unerwartete Laufzeitfehler.
TypeScript bietet nur eine grundlegende TypprĂŒfung, und die Tatsache, dass ZuverlĂ€ssigkeit und TypprĂŒfung zur Laufzeit nicht ihre Aufgabe sind, lĂ€sst TypeScript in der Welt der halben Sachen zwischen der besten Welt und der Welt, in der wir jetzt programmieren, zurĂŒck.
TypeScript ist groĂartig dank der guten UnterstĂŒtzung von IDEs wie vscode, bei denen wir wĂ€hrend des Druckvorgangs visuelles Feedback erhalten.
TypeScript-Fehler in vscodeTypeScript verbessert auch Refactoring- und Code-Breaking-Ănderungen (z. B. Ănderungen an Methodensignaturen), die beim Start des TypeScript-Compilers sofort erkannt werden.
TypeScript bietet eine gute TypprĂŒfung und ist definitiv besser als keine TypprĂŒfung oder einfache Eslint-PrĂŒfung, aber ich bin der Meinung, dass TypeScript viel besser sein kann und die erforderlichen Compiler-Optionen diejenigen zufrieden stellen können, die mehr von der Sprache wollen.

Abonnieren Sie unseren Instagram-Entwickler
