Vorwort zur zweiten Auflage
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Es ist kaum zu glauben, dass es schon fast fünf Jahre her ist, dass die erste Ausgabe von EffectiveTypeScript veröffentlicht wurde. Das Buch und die dazugehörige Website sind sehr gut angekommen und haben unzähligen Entwicklern geholfen, die Sprache besser zu verstehen und anzuwenden.
Ich war überrascht, wie schnell ich gefragt wurde, ob das Buch nicht veraltet sei. Es dauerte nur sechs Monate! Angesichts des Tempos, in dem sich TypeScript in den Jahren vor der ersten Ausgabe verändert hat, war das eine echte Sorge für mich. Ich versuchte zu vermeiden, Material zu drucken, das bald veraltet sein würde. Das bedeutete, dass ich mich mehr auf zeitlose Themen wie Sprachgrundlagen und Programmdesign konzentrierte als auf Bibliotheken und Frameworks. Im Großen und Ganzen hat sich das Material in Effective TypeScript gut bewährt.
Als TypeScript weiterentwickelt wurde und neue Funktionen hinzukamen, wurde die erste Ausgabe nicht so sehr ungültig, sondern es entstanden Lücken in ihrer Abdeckung. Um einen "effektiven" Artikel zu schreiben, muss man mehr als nur wissen, wie ein Feature funktioniert. Es erfordert auch Erfahrung im Umgang mit dieser Funktion: Zeit, die damit verbracht wird, zu lernen, welche Muster gut funktionieren und welche sich nicht bewähren. Bedingte Typen wurden erst 2019 in die Sprache aufgenommen, daher hatte ich wenig Erfahrung mit ihnen. Sie werden in dieser Ausgabe ausführlicher behandelt. Template-Literal-Typen waren die größte Neuerung in TypeScript in den letzten fünf Jahren. Sie haben ganz neue Möglichkeiten eröffnet und werden in Punkt 54 behandelt.
Außerdem sind die TypeScript-Entwickler dank Projekten wie den Type Challenges viel ehrgeiziger geworden, was das Typsystem angeht. In der ersten Ausgabe wurden Generics und Programmierung auf Typebene nur am Rande behandelt. Jetzt bekommen sie ein ganzes Kapitel, Kapitel 6.
Mehr als acht Jahre, nachdem ich TypeScript zum ersten Mal ausprobiert habe, macht es mir immer noch Spaß und ich freue mich jedes Mal, wenn ich die neuesten Versionshinweise lese oder eine ambitionierte neue PR von Anders Hejlsberg sehe, die die Runde macht. Außerdem macht es mir nach wie vor Spaß, anderen Entwicklern dabei zu helfen, TypeScript zu lernen und es besser zu nutzen. Ich hoffe, das kommt auf diesen Seiten zum Ausdruck, und ich hoffe, dass dir die Lektüre dieses Buches dabei hilft, die Arbeit mit TypeScript so sehr zu genießen wie ich!
Wallkill, NY
März 2024
Für wen dieses Buch ist
Die Effective-Bücher sollen das "zweite Standardbuch" zu ihrem Thema sein. Du wirst am meisten von Effective TypeScript profitieren, wenn du bereits praktische Erfahrung mit JavaScript und TypeScript hast. Mein Ziel mit diesem Buch ist es nicht, dir TypeScript oder JavaScript beizubringen, sondern dir dabei zu helfen, von einem Anfänger oder Fortgeschrittenen zu einem Experten zu werden. Die Themen in diesem Buch helfen dir dabei, ein mentales Modell davon zu entwickeln, wie TypeScript und sein Ökosystem funktionieren, machen dich auf Fallstricke und Fallen aufmerksam, die es zu vermeiden gilt, und leiten dich an, die vielen Möglichkeiten von TypeScript so effektiv wie möglich zu nutzen. Während ein Nachschlagewerk die fünf Möglichkeiten erklärt, mit denen eine Sprache X tun kann, sagt dir ein effektives Buch, welche dieser fünf Möglichkeiten du nutzen solltest und warum.
TypeScript hat sich in den letzten Jahren rasant weiterentwickelt, aber ich hoffe, dass es sich so weit stabilisiert hat, dass der Inhalt dieses Buches auch in den nächsten Jahren noch gültig sein wird. Dieses Buch konzentriert sich hauptsächlich auf die Sprache selbst und nicht auf Frameworks oder Build-Tools. Du wirst keine Beispiele dafür finden, wie du React oder Vue mit TypeScript verwendest oder wie du TypeScript für die Zusammenarbeit mit Webpack oder Vite konfigurierst. Die Ratschläge in diesem Buch sollten für alle TypeScript-Nutzer relevant sein.
Warum ich dieses Buch geschrieben habe
Als ich anfing, bei Google zu arbeiten, bekam ich ein Exemplar der dritten Ausgabe von Effective C++ von Scott Meyers (Addison-Wesley Professional). Es war anders als alle anderen Programmierbücher, die ich bisher gelesen hatte. Es versuchte nicht, Anfängern den Zugang zu erleichtern oder ein komplettes Handbuch für die Sprache zu sein. Anstatt dir zu erklären, was die verschiedenen Funktionen von C++ sind, sagt es dir, wie du sie verwenden solltest und wie nicht. Dies geschah durch Dutzende von kurzen, spezifischen Artikeln, die durch konkrete Beispiele motiviert wurden.
Der Effekt, all diese Beispiele zu lesen und gleichzeitig die Sprache täglich zu benutzen, war unverkennbar. Ich hatte zwar schon vorher mit C++ gearbeitet, aber zum ersten Mal fühlte ich mich wohl mit der Sprache und wusste, wie ich über die Möglichkeiten, die sie mir bot, nachdenken konnte. In späteren Jahren machte ich ähnliche Erfahrungen, als ich Effective Java von Joshua Bloch (Addison-Wesley Professional) und Effective JavaScript von David Herman (Addison-Wesley Professional) las.
Wenn du dich bereits in einigen Programmiersprachen auskennst, kann es eine gute Möglichkeit sein, deine mentalen Modelle zu hinterfragen und zu lernen, was sie auszeichnet. Ich habe durch das Schreiben dieses Buches enorm viel über TypeScript gelernt. Ich hoffe, dass du beim Lesen die gleiche Erfahrung machen wirst!
Wie dieses Buch organisiert ist
Dieses Buch ist eine Sammlung von "Artikeln", von denen jeder ein kurzer technischer Aufsatz ist, der dir spezielle Ratschläge zu einem Aspekt von TypeScript gibt. Die Artikel sind thematisch in Kapitel gegliedert, aber du kannst auch einfach zwischen den Kapiteln hin- und herspringen und die lesen, die dir am interessantesten erscheinen.
Die Überschrift jedes Artikels verrät, was du mitnehmen kannst. Das sind die Dinge, an die du dich erinnern solltest, wenn du TypeScript verwendest. Es lohnt sich also, das Inhaltsverzeichnis zu überfliegen, um sie im Kopf zu behalten. Wenn du zum Beispiel Dokumentation schreibst und das Gefühl hast, dass du keine Typinformationen schreiben solltest, dann solltest du Punkt 31 lesen : Wiederhole keine Typinformationen in der Dokumentation.
Der Text des Artikels geht auf die Ratschläge im Titel ein und untermauert sie mit konkreten Beispielen und technischen Argumenten. Fast jeder Punkt, der in diesem Buch angesprochen wird, wird durch Beispielcode veranschaulicht. Ich neige dazu, technische Bücher zu lesen, indem ich mir die Beispiele ansehe und die Prosa überfliege, und ich nehme an, du machst es ähnlich. Ich hoffe, du wirst die Prosa und die Erklärungen lesen! Aber die wichtigsten Punkte solltest du auch verstehen, wenn du die Beispiele überfliegst.
Nachdem du den Artikel gelesen hast, solltest du verstehen, warum er dir helfen wird, TypeScript effektiver zu nutzen. Du wirst auch genug wissen, um zu verstehen, wenn er auf deine Situation nicht zutrifft. Scott Meyers, der Autor von Effective C++, gibt ein einprägsames Beispiel dafür. Er traf sich mit einem Team von Ingenieuren, die Software für den Einsatz auf Raketen schrieben. Sie wussten, dass sie seine Ratschläge zur Vermeidung von Ressourcenlecks ignorieren konnten, weil ihre Programme immer beendet wurden, wenn die Rakete das Ziel traf und ihre Hardware in die Luft flog. Mir ist keine Rakete mit JavaScript-Laufzeit bekannt, aber das James Webb Space Telescope hat eine, man weiß also nie!
Am Ende eines jeden Artikels stehen "Dinge, an die du dich erinnern solltest". Das sind ein paar Aufzählungspunkte, die den Artikel zusammenfassen. Wenn du den Artikel überfliegst, kannst du diese Punkte lesen, um ein Gefühl dafür zu bekommen, was der Artikel aussagt und ob du mehr lesen möchtest. Du solltest den Artikel trotzdem lesen! Aber die Zusammenfassung reicht zur Not auch aus.
Konventionen in TypeScript Codebeispielen
Alle Codebeispiele sind TypeScript, außer wenn aus dem Kontext klar hervorgeht, dass es sich um JSON, HTML oder eine andere Sprache handelt. Ein Großteil der Erfahrung bei der Verwendung von TypeScript besteht in der Interaktion mit deinem Editor, was im Druck einige Herausforderungen mit sich bringt. Ich habe ein paar Konventionen eingeführt, damit das funktioniert.
Die meisten Editoren zeigen Fehler durch verschnörkelte Unterstreichungen an. Um die vollständige Fehlermeldung zu sehen, fährst du mit dem Mauszeiger über den unterstrichenen Text. Um einen Fehler in einem Codebeispiel anzuzeigen, setze ich Schnörkel in eine Kommentarzeile unter die Stelle, an der der Fehler auftritt:
let
str
=
'not a number'
;
let
num
:
number
=
str
;
// ~~~ Type 'string' is not assignable to type 'number'
Ich bearbeite die Fehlermeldungen gelegentlich, um sie übersichtlicher und kürzer zu machen, aber ich entferne niemals einen Fehler. Wenn du ein Codebeispiel in deinen Editor kopierst und einfügst, solltest du genau die angegebenen Fehler erhalten - nicht mehr und nicht weniger.
Um auf das Fehlen eines Fehlers hinzuweisen, verwende ich // OK
:
let
str
=
'not a number'
;
let
num
:
number
=
str
as
any
;
// OK
Du solltest mit dem Mauszeiger über ein Symbol in deinem Editor fahren können, um zu sehen, was TypeScript als seinen Typ ansieht. Um dies im Text anzugeben, verwende ich einen Kommentar mit Twoslash-Syntax (^?
):
let
v
=
{
str
:
'hello'
,
num
:
42
};
// ^? let v: { str: string; num: number; }
Der Kommentar zeigt an, was du in deinem Editor sehen würdest, wenn du mit der Maus über das Symbol über dem Caret (^
) fährst. Das entspricht der Konvention, die auf dem TypeScript-Spielplatz verwendet wird. Wenn du ein Codebeispiel dorthin kopierst und alles nach dem ^?
weglässt, wird TypeScript den Rest für dich ausfüllen. Was du auf der Spielwiese siehst(Abbildung P-1), sollte genau mit dem übereinstimmen, was du im Druck siehst.
Ich werde gelegentlich No-Op-Anweisungen einführen, um den Typ einer Variablen in einer bestimmten Codezeile anzugeben:
function
foo
(
value
:
string
|
string
[])
{
if
(
Array
.
isArray
(
value
))
{
value
;
// ^? (parameter) value: string[]
}
else
{
value
;
// ^? (parameter) value: string
}
}
Die Zeilen value;
dienen nur dazu, den Typ in jedem Zweig der Bedingung zu zeigen. Du musst (und solltest) solche Anweisungen nicht in deinen eigenen Code einbauen.
Wenn nicht anders vermerkt oder aus dem Kontext ersichtlich, sind die Codebeispiele dazu gedacht, mit dem --strict
Flag überprüft zu werden. Während sich gedruckte Exemplare eines Buches nicht ändern, ändert sich TypeScript, und es ist unvermeidlich, dass sich einige der Typen oder Fehler in den Codebeispielen in Zukunft ändern werden. Im Effective TypeScript Repo findest du aktualisierte Versionen der Beispiele in diesem Buch. Alle Beispiele wurden mit literate-ts und TypeScript 5.4 überprüft.
In diesem Buch verwendete typografische Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Constant width bold
-
Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.
Constant width italic
-
Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.
Tipp
Dieses Element steht für einen Tipp oder eine Anregung.
Hinweis
Dieses Element steht für einen allgemeinen Hinweis.
Warnung
Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.
Code-Beispiele verwenden
Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://github.com/danvk/effective-typescript zum Download bereit .
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eineGenehmigung erforderlich.
Wir freuen uns über eine Namensnennung, verlangen sie aber in der Regel nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Ein Beispiel: "Effective TypeScript,2. Aufl., von Dan Vanderkam (O'Reilly). Copyright 2024 Dan Vanderkam, 978-1-492-05374-3."
Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter permissions@oreilly.com kontaktieren .
O'Reilly Online Learning
Hinweis
Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.
Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter https://oreilly.com.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-889-8969 (in den Vereinigten Staaten oder Kanada)
- 707-827-7019 (international oder lokal)
- 707-829-0104 (Fax)
- support@oreilly.com
- https://www.oreilly.com/about/contact.html
Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/effective-typescript-2e aufrufen .
Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter http://www.oreilly.com.
Du findest uns auf LinkedIn: https://linkedin.com/company/oreilly-media.
Sieh uns auf YouTube: http://youtube.com/oreillymedia.
Danksagungen
Entgegen meiner Hoffnungen hat sich das Schreiben der zweiten Ausgabe nicht als einfacher oder weniger zeitaufwändig erwiesen als die erste. Das Buch ist von 62 auf 83 Artikel angewachsen. Ich habe nicht nur 22 neue Artikel geschrieben (ein alter Artikel wurde zu einem anderen zusammengefasst), sondern auch das gesamte Originalmaterial durchgesehen und gründlich überarbeitet. Einige Teile, wie die Artikel 45 und 55, habe ich fast komplett neu geschrieben.
Viele neue Artikel basieren auf Materialien, die zuerst im Effective TypeScript Blog erschienen sind, obwohl alle von ihnen erheblich überarbeitet wurden. Kapitel 6 basiert größtenteils auf meinen persönlichen Erfahrungen bei der Entwicklung des Crosswalk und der grob getippten Bibliotheken für Delve bei Sidewalk Labs.
Hier sind die Ursprünge der neuen Artikel in der zweiten Ausgabe:
-
Punkt 28 ist aus dem Blogbeitrag "Use Classes and Currying to Create New Inference Sites" übernommen .
-
Punkt 32 ist aus Codeüberprüfungen entstanden. Ich wusste nicht, dass dies eine Regel ist, bis ich sah, dass siegebrochen wurde!
-
Punkt 36 wurde durch Feedback inspiriert, das ich bei unzähligen Codeüberprüfungen gegeben habe.
-
Punkt 37 basiert auf persönlichen Erfahrungen und Evan Martins Blogbeitrag "Why Not Add an Option for That?". Die häufigen Tweets von Cory House zu diesem Thema haben mir Mut gemacht, es in das Buch aufzunehmen.
-
Punkt 38 wurde durch das Zitat von Alan Perlis inspiriert, das ich häufig zitiere, sowie durch die Regel von Scott Meyers.
-
Punkt 39 basiert auf den Erfahrungen meines Teams mit dem
Jsonify
Adapter, den wir mit Begeisterung annahmen und dann mit noch größerer Begeisterung wieder verwarfen. Diese Erfahrung führte zu dem Blogbeitrag "The Trouble with Jsonify: Typen vereinheitlichen, anstatt kleine Unterschiede zu modellieren". -
Punkt 48 wurde aus dem Blogbeitrag "The Seven Sources of Unsoundness in TypeScript" übernommen, an dem Ryan Cavanaugh maßgeblich beteiligt war.
-
Artikel 50 wurde inspiriert von vielen Überlegungen darüber, was Typen eigentlich sind, und einer Stack Overflow-Antwort, die abhängige Typen erklärt.
-
Artikel 51 ist eine Adaption des Blogposts "The Golden Rule of Generics", der wiederum eine Adaption von Ratschlägen aus demTypeScript-Handbuch ist.
-
Artikel 53 wurde von meiner Arbeit über den Zebrastreifen inspiriert und von der Neugier auf all die
[T]
Verpackungen, die ich gesehen habe. -
Artikel 54 wurde von meinen eigenen Erkundungen der Template-Literal-Typen nach der Veröffentlichung von TypeScript 4.1 inspiriert, die in dem Blogbeitrag "TypeScript Splits the Atom!" gipfelten .
-
Artikel 56 ist die Krönung meines langjährigen Interesses an diesem Thema. Den Anstoß dazu gab Tizian Cernicova-Dragomirs Antwort auf eine Stack Overflow-Frage zur Typisierung
_.invert
, gefolgt von meinen eigenen Erfahrungen mit Crosswalk und crudely-typed, die schließlich zu dem Blogbeitrag "The Display of Types" führten. -
Punkt 57 wurde von den Versionshinweisen für TypeScript 4.5 inspiriert, das die Tail-Rekursion hinzugefügt hat.
-
Artikel 58 wurde durch die Erfahrung inspiriert, TypeScript mit Datenbanken zu verbinden, was schließlich zu meinem Vortrag auf dem TypeScript Congress 2022 führte: "TypeScript und SQL: Six Ways to Bridge the Divide".
-
Artikel 59 zeigt einen weit verbreiteten Trick, den mir Jesse Hallett bei der Rezension der ersten Ausgabe vorgestellt hat. Die Variante "Paare" stammt aus einem Tweet von Tom Hicks aus dem Jahr 2021.
-
Artikel 62 wurde von einem Artsy-Blogbeitrag inspiriert: "Bedingte Typen in TypeScript".
-
Artikel 63 geht auf Ryan Cavanaughs Feedback zur ersten Ausgabe zurück, das ich schließlich in einem Blogbeitrag zusammengefasst habe: "Exclusive Or and the Optional never Trick". Stefan Baumgartners Begeisterung für diesen Trick im TypeScript Cookbook (O'Reilly) hat mich ermutigt, ihn in das Buch aufzunehmen.
-
Artikel 71 wurde durch eine Diskussion mit Evan Martin auf reddit und einen frustrierenden Fehler inspiriert, der auf
new Set("string")
zurückkam. Dies führte zu dem Blogbeitrag "In Defense of Interface: Using Declaration Merging to Disable 'Bad Parts'". -
Punkt 74 ist ein Thema, das häufig auftaucht, vor allem wenn du nicht das richtige mentale Modell von TypeScript hast.
-
Artikel 76 wurde durch unzählige Debugging-Sitzungen inspiriert, die auf ein falsches Modell deiner Umgebung zurückgingen.
-
Artikel 77 wurde durch persönliche Neugier auf dieses Thema, ein paar Stack Overflow-Fragen und einen Vortrag von Gary Bernhardt inspiriert.
-
Artikel 78 wurde durch eine schmerzhafte persönliche Erfahrung inspiriert, bei der TypeScript langsam wurde. Er basiert auf dem TypeScript-Wiki und dem Blogbeitrag "What's Typescript Compiling? Finde es mit einer Treemap heraus".
Danke an meine technischen Prüfer: Josh Goldberg, Stefan Baumgartner, Ryan Cavanaugh, Boris Cherny und Tizian Cernicova-Dragomir. Euer Feedback hat dieses Buch ungemein verbessert. Danke an meine Kollegen von Delve (insbesondere Stephanie Chew, Luda Zhao, Ha Vu und Amanda Meurer) für die vielen Codeüberprüfungen und dafür, dass sie meinen grenzenlosen Enthusiasmus für TypeScript akzeptiert haben. Vielen Dank an alle bei O'Reilly, die zum Gelingen dieses Buches beigetragen haben: Angela Rufino, Ashley Stussy, Amanda Quinn, Clare Laylock, Sonia Saruba. Danke an Chris Mischaikow für das Korrekturlesen in letzter Minute. Die Jazzy Morning Playlist von Spotify, angefangen mit Beautiful Sunrise von Arta Porting, war der Soundtrack zum Schreiben und Bearbeiten.
Abschließend möchte ich Alex für ihre Unterstützung danken: Durch eine Pandemie, Online- und persönliche Hochzeiten, einen Jobwechsel und einen großen Umzug bin ich froh, dass wenigstens eine Sachekonstant geblieben ist!
Get Effektives TypeScript, 2. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.