Funktionsweise Flashcards
Was ist der Abstract Syntax Tree (AST)?
Der Compiler parsed den Quellcode zum Abstract Syntax Tree (AST), indem alle Whitespaces, Kommentare und Indentations entfernt werden.
Der AST wird dann zu Bytecode kompiliert
Der Bytecode wird dann von runtime evaluated.
Welche Vorteile bringt Typescript?
Fehler fallen nicht mehr zu runtime auf, sondern beim Schreiben im Editor
Type Safety vermindert Fehler bei Schnittstellen.
Umdenken im Code schreiben von Value Level hin zum Type Level
Dokumentation wird verbessert
Refactoring & Erweiterbarkeit wird verbessert
Unit Testing wird teilweise überflüssig
Bessere Produktivität
Wie funktioniert das Typechecking durch TypeScript technisch?
Typescript Source -> TypeScript AST
AST wird durch typechecker geprüft
TypeScript AST -> JavaScript Source
Danach
JavaScript Source -> JavaScript AST
AST -> Bytecode
Bytecode Auswertung zu runtime
Wird TypeScript zu JavaScript konvertiert?
Ja, nachdem das der TypeScript AST erzeugt wurde wird dieser typechecked und dann in JavaScript gewandelt.
Was ist ein Typechecker?
Ein Programm, welches den TypeScript AST auf Type Safety überprüft.
Bei Unstimmigkeiten entstehen Fehler.
Was ist Type Safety (Typisierung)?
Die Nutzung von Typen, um ein Programm daran zu hindern ungültige Dinge zu tun.
Welche Dinge in der Kompilierung von TypeScript geschehen durch den TypeScript Compiler (TSC) und welche durch JavaScript runtime?
TypeScript Compiler (TSC)
TypeScript Source -> TypeScript AST
AST typechecking
TypeScript AST -> JavaScript Source
JavaScript runtime
JavaScript Source -> JavaScript AST
AST -> bytecode
Bytecode evaluierung durch runtime
Warum ist es wichtig wann TypeScript das typechecking macht?
Es zuerst und in einem anderen Schritt als die Übersetzung zu JavaScript
Daher kann die Typisierung überarbeitet und verbessert werden während das JavaScript Programm keine breaking Changes ausgesetzt wird.
Was ist ein Type System?
Ein Set an Regeln das der Typechecker nutzt, um Typen für das Programm zu bestimmen
Welche beiden Arten von Type Systems gibt es?
Ein Type System bei welchem dem Compiler alles mit expliziter Syntax gesagt werden muss
Und ein Type System welches die Typen sich selbst erschließt
Welche Art von Type System nutzt TypeScript? Explizit oder Infered?
TypeScript kann durch Annotations explizite Typisierung
Aber auch erschlossene / inferred Typisierung
Muss man in TypeScript explizit hinter einer Variable den Typen schreiben?
let a: number = 1
Nein, auch mit let a = 1 würde TypeScript sich den Typen erschließen / inferring
Wann sollte man Typen mit TypeScript explizit und wann implizit typisieren?
Es ist gutet Stil immer wenn es geht nicht die Typisierung zu schreiben, sondern TypeScript sich diese ableiten lassen (inferring)
Dadurch wird der explizite Code und der Quellcode minimiert
Wie sind Typen in JavaScript vs Typescript gebunden?
JavaScript = dynamische Bindung
TypeScript = statische Bindung
Wie werden Typen in JavaScript und in TypeScript konvertiert?
JavaScript = Automatische Konvertierung (‘‘2’’ == 2)
TypeScript = kaum eine Konvertierung
Wann werden Typen in JavaScript gegenüber TypeScript überprüft?
JavaScript = runtime
TypeScript = Compile Time
Wann fallen Typisierungsfehler in JavaScript gegenüber TypeScript auf?
JavaScript = Runtime (Meistens)
TypeScript = Compile Time (Meistens)
Was bedeutet JavaScripts dynamische Typisierung?
Es muss das Programm laufen lassen, um zur runtime zu bestimmen welche Typen es besitzt und kennt sie nicht vorher
Was für eine Art von Typisierung ist TypeScript?
TypeScript ist eine graduell typisierte Sprache
Was bedeutet es, dass TypeScript eine graduell typisierte Sprache ist?
Typescript ist graduell typisiert, da es mit 100% type coverage am besten funktioniert sich aber Typen auch selber ableiten kann
Wie viel % type coverage sollte man anstreben?
Sofern man nicht gerade ein JavaScript Projekt migriert sollte es 100% type coverage sein
Was bedeutet es das JavaScript weakly typed ist?
Es versucht für den Developer die Typen automatisch zu konvertieren und vermeintlich sinvoll zu behandeln
Was passiert in JavaScript bei
3 + [1] ?
JavaScript merkt zur Runtime das 3 eine Nummer ist und [1] ein Array
Weil + benutzt wird denke es an Konkatenation
Es konvertiert 3 in einen String ‘‘3’’
Es konvertiert [1] in einen String ‘‘1’’
Es konkateniert diese zum String Ergebnis ‘‘31’’
Was passiert in TypeScript bei
3 + [1] ?
Es entsteht zur Compile Time der Fehler TS2365 Operator + cannot be applied to types ‘3’ and number[]
Was sollte man immer machen wenn man Typen konvertieren muss?
Diese explizit Typisieren, damit die Übersicht behalten werden kann
Welche Arten von Errors throwed TypeScript zur Compile Time?
Syntax Error
Type Erorr