TypeScript streng typisiert – Teilweise vollständig statische Typen
Im vorherigen Teil dieser Beitragsreihe haben wir über die sichere Nullbarkeit gesprochen.
Jetzt erklären und lösen wir das dritte und letzte Problem des TypeScript-Standardverhaltens: Überbleibsel der dynamischen Typisierung.
Wir werden Folgendes abdecken:
- Überreste der dynamischen Eingabe
- Tatsächliche Gleichheitsprüfungen
- Keine impliziten Konvertierungen in Bedingungen
- Bedingungen in Kurzschrift
- Keine Mischung aus Zeichenfolgen und Zahlen
Überreste dynamischer Typisierung
TypeScript soll ein „statischer Typprüfer“ sein, im Gegensatz zu JavaScript, bei dem die Eingabe sehr dynamisch ist.
Aber in einem früheren Teil dieser Beitragsreihe haben wir auch erklärt, dass TypeScript als Obermenge von JavaScript aufgebaut ist.
Das Problem ist also: Einige Teile des dynamischen JavaScript-Schreibsystems verbleiben in TypeScript. Wir werden daher erklären, wie man diese verbleibenden Verhaltensweisen unterdrückt, um eine vollständige statische Typisierung zu erreichen.
Tatsächliche Gleichheitsprüfungen
- ESLint: eqeqeq
- Biome: suspicious.noDoubleEquals (in empfohlen)
Das beste Beispiel für das Problem sind Gleichstellungsprüfungen. In JavaScript ist == nicht gerade eine Gleichheitsprüfung, sondern eine Äquivalenzprüfung:
1 == "1"; // true
Obwohl die Typen unterschiedlich sind, kommen einige Konvertierungsregeln zum Tragen, damit JavaScript die Werte vergleichen kann. Dies kann zu vielen Fehlern führen, da die Regeldetails schwer zu merken sind, manchmal ziemlich seltsam sind und nicht in allen dynamischen Sprachen (wie z. B. PHP) genau gleich sind.
Diese Äquivalenzprüfungen sind nur in einer dynamisch typisierten Sprache wie JavaScript sinnvoll. Von dem Moment an, in dem wir uns entscheiden, in TypeScript zu arbeiten, sollten nur noch tatsächliche Gleichheitsprüfungen (Typ und Wert) verwendet werden.
1 === "1"; // false
Die eqeqeq-Lint-Regel erzwingt dies.
Menschen, die Sprachen wie Java, C# oder Rust verwenden, sollten mit diesem Problem besonders vorsichtig sein, da == in JavaScript oder TypeScript nicht dasselbe bedeutet wie in diesen Sprachen. In JavaScript und TypeScript ist ein drittes = erforderlich, um das gleiche Verhalten zu erreichen.
Keine impliziten Konvertierungen in Bedingungen
- ESLint: @typescript-eslint/strict-boolean-expressions
- Biom: fehlende Regel
Denken Sie, dass die Bedingungen jetzt sicher sind? Leider nicht, da Konvertierungen implizit sein können:
let tax: number | undefined = 0; if (tax) { console.log("Process payment"); } if (!tax) { throw new Error(); }
Das obige Beispiel entspricht:
let tax: number | undefined = 0; if (tax == true) { console.log("Process payment"); } if (tax == false) { throw new Error(); }
Wie Sie sehen können, gab es implizite ==, daher finden immer noch Konvertierungen statt: 0 ist nicht gleichbedeutend mit wahr, sondern gleichbedeutend mit falsch. Es kommt also zu einem Fehler, obwohl die Steuer ein gültiger Wert ist.
Die Lint-Regel „strict-boolean-expressions“ verbietet solche impliziten Bedingungen und erzwingt tatsächliche Prüfungen:
let tax: number | undefined = 0; if (tax !== undefined) { console.log("Process payment"); } if (tax === undefined) { throw new Error(); }
Es mag für Leute, die an schnelle Bedingungen in JavaScript gewöhnt sind, eine der mühsamsten Regeln sein, aber um es ins rechte Licht zu rücken: Es ist einfach die normale Art, Dinge in anderen Sprachen wie Java, C# oder Rust zu erledigen.
Wie im Konfigurationsteil gezeigt, ist das Deaktivieren der Unteroptionen „allowNumber“ und „allowString“ wichtig, um alle Fehler zu vermeiden.
Die einzige zulässige Ausnahme gilt für Objekte und Arrays: Diese Fälle sind sicher, da sie im Gegensatz zu Zeichenfolgen und Zahlen keine falschen Werte haben. Folgendes ist also noch in Ordnung:
let movie: Movie | undefined; if (movie) {} if (!movie) {}
Hinweis: Switch-Anweisungen sind bereits sicher, da sie intern === verwenden.
Kurzschrift für Bedingungen
- ESLint: @typescript-eslint/prefer-nullish-coalescing (in stilistisch-typgeprüft)
- Biom: fehlende Regel
Die Lint-Regel strict-boolean-expressions sorgt dafür, dass Bedingungsprüfungen typsicher sind, es gibt jedoch andere Bedingungssyntaxen als if:
const movieRating = userRating || 5; // Which is a shorter version of: const movieRating = userRating == true ? userRating : 5;
Wenn der Benutzer 0 bewertet hat, entspricht 0 „falsch“, sodass die Bewertung 5 statt 0 beträgt.
Es kann mit modernem JavaScript vermieden werden:
const movieRating = userRating ?? 5; // Which is a shorter version of: const movieRating = userRating !== undefined && userRating !== null ? userRating : 5;
Dies kann durch die Prefer-Nullish-Coalescing-Lint-Regel erzwungen werden.
Beachten Sie, dass ?? sollte nicht überall verwendet werden: || ist immer noch relevant, wenn mit Booleschen Werten gearbeitet wird.
Keine Vermischung von Zeichenfolgen und Zahlen
- ESLint:
- Prefer-Vorlage
- @typescript-eslint/restrict-plus-operands (in empfohlenem Typ geprüft)
- @typescript-eslint/restrict-template-expressions (im empfohlenen Typ geprüft)
- Biom:
- style.useTemplate (empfohlen)
- andere Regeln fehlen
In JavaScript kann der +-Operator sowohl für die mathematische Addition von Zahlen als auch für die Verkettung von Zeichenfolgen verwendet werden. Es führt zu einem Fehler.
"There is " + 3 + 1 + "Matrix movies"; // 31 "There is " + (3 + 1) + "Matrix movies"; // 4
Der +-Operator sollte der mathematischen Addition vorbehalten sein. Zumindest sollte es nur mit Daten desselben Typs verwendet werden, was durch die Lint-Regel „Restrict-Plus-Operands“ erzwungen wird.
Template strings from modern JavaScript should be used for string concatenation, which the prefer-template lint rule enforces:
const movie = `Everything everywhere all at once`; `${movie} is the best movie!`;
Conversely, only strings should be used in template strings, which the restrict-template-expressions lint rule enforces.
If mixing types is what is actually wanted, conversions should be explicit:
const total = 3; `There is ${total.toFixed()} Matrix movies`;
Note that template strings can be nested:
const total = 3; `There is ${total.toFixed()} Matrix movie${total > 1 ? "s" : ""}`;
Conclusion
This is the end of this posts series. You can follow my account (button on top right of this page) to know when other posts about TypeScript or other topics like Angular are published.
You want to contact me? Instructions are available in the summary.
Das obige ist der detaillierte Inhalt vonTypeScript streng typisiert – Teilweise vollständig statische Typen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

Diskussion über die Realisierung von Parallaxe -Scrolling- und Elementanimationseffekten in diesem Artikel wird untersuchen, wie die offizielle Website der Shiseeido -Website (https://www.shiseeido.co.jp/sb/wonderland/) ähnlich ist ...

JavaScript zu lernen ist nicht schwierig, aber es ist schwierig. 1) Verstehen Sie grundlegende Konzepte wie Variablen, Datentypen, Funktionen usw. 2) Beherrschen Sie die asynchrone Programmierung und implementieren Sie sie durch Ereignisschleifen. 3) Verwenden Sie DOM -Operationen und versprechen Sie, asynchrone Anfragen zu bearbeiten. 4) Vermeiden Sie häufige Fehler und verwenden Sie Debugging -Techniken. 5) Die Leistung optimieren und Best Practices befolgen.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

Erforschen Sie die Implementierung der Funktion des Bedien- und Drop-Einstellungsfunktion der Panel ähnlich wie VSCODE im Front-End. In der Front-End-Entwicklung wird VSCODE ähnlich wie VSCODE implementiert ...
