Funktionsweise Flashcards

1
Q

Was ist der Abstract Syntax Tree (AST)?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Welche Vorteile bringt Typescript?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie funktioniert das Typechecking durch TypeScript technisch?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wird TypeScript zu JavaScript konvertiert?

A

Ja, nachdem das der TypeScript AST erzeugt wurde wird dieser typechecked und dann in JavaScript gewandelt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist ein Typechecker?

A

Ein Programm, welches den TypeScript AST auf Type Safety überprüft.

Bei Unstimmigkeiten entstehen Fehler.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist Type Safety (Typisierung)?

A

Die Nutzung von Typen, um ein Programm daran zu hindern ungültige Dinge zu tun.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Welche Dinge in der Kompilierung von TypeScript geschehen durch den TypeScript Compiler (TSC) und welche durch JavaScript runtime?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Warum ist es wichtig wann TypeScript das typechecking macht?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was ist ein Type System?

A

Ein Set an Regeln das der Typechecker nutzt, um Typen für das Programm zu bestimmen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Welche beiden Arten von Type Systems gibt es?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche Art von Type System nutzt TypeScript? Explizit oder Infered?

A

TypeScript kann durch Annotations explizite Typisierung

Aber auch erschlossene / inferred Typisierung

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Muss man in TypeScript explizit hinter einer Variable den Typen schreiben?
let a: number = 1

A

Nein, auch mit let a = 1 würde TypeScript sich den Typen erschließen / inferring

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wann sollte man Typen mit TypeScript explizit und wann implizit typisieren?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wie sind Typen in JavaScript vs Typescript gebunden?

A

JavaScript = dynamische Bindung

TypeScript = statische Bindung

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie werden Typen in JavaScript und in TypeScript konvertiert?

A

JavaScript = Automatische Konvertierung (‘‘2’’ == 2)

TypeScript = kaum eine Konvertierung

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wann werden Typen in JavaScript gegenüber TypeScript überprüft?

A

JavaScript = runtime

TypeScript = Compile Time

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Wann fallen Typisierungsfehler in JavaScript gegenüber TypeScript auf?

A

JavaScript = Runtime (Meistens)

TypeScript = Compile Time (Meistens)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was bedeutet JavaScripts dynamische Typisierung?

A

Es muss das Programm laufen lassen, um zur runtime zu bestimmen welche Typen es besitzt und kennt sie nicht vorher

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Was für eine Art von Typisierung ist TypeScript?

A

TypeScript ist eine graduell typisierte Sprache

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Was bedeutet es, dass TypeScript eine graduell typisierte Sprache ist?

A

Typescript ist graduell typisiert, da es mit 100% type coverage am besten funktioniert sich aber Typen auch selber ableiten kann

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Wie viel % type coverage sollte man anstreben?

A

Sofern man nicht gerade ein JavaScript Projekt migriert sollte es 100% type coverage sein

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Was bedeutet es das JavaScript weakly typed ist?

A

Es versucht für den Developer die Typen automatisch zu konvertieren und vermeintlich sinvoll zu behandeln

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Was passiert in JavaScript bei

3 + [1] ?

A

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’’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Was passiert in TypeScript bei

3 + [1] ?

A

Es entsteht zur Compile Time der Fehler TS2365 Operator + cannot be applied to types ‘3’ and number[]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Was sollte man immer machen wenn man Typen konvertieren muss?

A

Diese explizit Typisieren, damit die Übersicht behalten werden kann

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Welche Arten von Errors throwed TypeScript zur Compile Time?

A

Syntax Error

Type Erorr

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Warum wird TypeScript als incrementally compiler statically typed language bezeichnet?

A

Weil sie durch Inkrementierung schnell rekompiliert werden kann. Es werden nur die Veränderungen neu kompiliert und nicht das ganze Programm mit Stellen die gleichgeblieben sind

28
Q

Welche Arten von Error kann TypeScript nicht entdecken?

A

Stack Overflow

Kaputte Netzwerkverbindungen

Falsche Nutzereingaben

29
Q

Wann tauchen Error auf die TypeScript nicht entdecken kann?

A

Zur Runtime bei Developer oder beim Kunden

30
Q

Wie kann Typescript konfiguriert werden?

A

Versioniert mit einer tsconfig.json im Rootverzeichnis

31
Q

Sie installiert man TypeScript und Linting?

A

NodeJS herunterladen

npm install –save-dev typescript tslint @types/node

32
Q

Was macht die Datei tsconfig.json

A

Sie stellt die Konfiguration für TypeScript, um anzugeben welche Dateien kompiliert werden sollen und in welche Verzeichnisse.

Auch die Version von JavaScript die erzeugt werden soll wird hier definiert

33
Q

Was machen die Bestandteile dieser tsconfig.json

{
  ''compilerOptions'': {
    ''lib'': [''es2015''],
    ''module'': ''commonjs'',
    ''outDir'': ''dist'',
    ''sourceMap'': true,
    ''strict'': true,
    ''target'': ''es2015''
},
''include'': [
    ''src''
  ]
}
A

include = Welche Dateien für TypeScript untersuchen

lib = Welche JavaSceipt API soll für die Ausführung des Codes genutzt werden? (bind, assign, queryselector)

module = Zu welchem module system soll kompiliert werden (commonjs, systemjs, es2015 etc)

outDir = Wo soll das generierte JavaScript hin

strict = sollte immer true sein um vollständige Typisierung zu erzwingen

target = Welche JavaScript Version soll kompiliert werden (ES2015, ES2016 etc)

34
Q

Was macht die Datei tslint.json?

A

Bietet Einstellungen für TypeScript Linting

Dort werden die Coding Conventions für

35
Q

Was ist ein Type?

A

Ein Set an Werten und Dingen die man mit diesen tun kann

36
Q

Was ist ein Beispiel für ein Type?

A

boolean

  • mit Werten true & false
  • Mit Methoden || && !
37
Q

Woher weiß ein Typechecker welche Dinge für einen Typ valide sind?

A

Er schaut auf den bekannten Type und überprüft ob Wertzuweisungen und Methodenaufrufe bekannt sind

38
Q
Was bedeutet 
function xy Parameter ist contrained als number?
A

Die Funktion xy besitzt einen Parameter welcher mit Typescript auf einen Wert des Typs number festgelegt ist

39
Q

Was bedeutet

der Type des Wertes 2 ist assignable zu number?

A

Dass der Type des zugewiesene Wertes 2 kompatibel mit dem Typ number ist

40
Q

Wie nennt man eine Function die keine Typisierung in ihren Parametern besitzt?

A

Uncontrained

41
Q

Was bedeuten bounds und upper bound in Typescript?

A

ERGÄNZEN

42
Q

Was ist der Type any?

A
  • any steht als Type für alles
  • any ist der default Type
  • any sollte immer nur die letzte Option sein
43
Q

Warum sollte any immer die letzte Option sein?

A
  • any ist alles und lässt alle Werte und auch alle unzulässigen Methodenaufrufe zu die zu Fehlern führen können
  • any entgeht TypeScript und führt JavaScript Verhalten ein
  • any sollte inmer nur explizit als annotation genutzt werden
44
Q

Wie geht TypeScript mit dem strict config flag und any um?

A
  • Any wird nicht zugelassen
45
Q

Wann kann man unknown benutzen?

A
  • Um bei einem noch unbekannten Typen any zu vermeiden
  • Bis man den Wert kennt kann man unknown einsetzen und TypeScript erinnert einen dann an das Redefinement und den Type zu ergänzen
46
Q

Wie kann man ein Refinement vornehmen und temporäre unknown Types zu korrigieren?

A
  • Mit JavaScript typeof und instanceof Operatoren um deren Typen zu bestimmen
47
Q

Welche Methoden/Operationen erlaubt unknown?

A
  • Vergleiche mit anderen unknown Types mittels ===, ||, && und ?
  • Negieren mit !
  • Refinement mit typeof und instanceof
48
Q

Infered TypeScript etwas selber zu unknown?

A
  • Nein, es muss explizit annotiert werden
49
Q

Was beinhaltet der Type number?

A
  • Ein Set aller Zahlen (integer, float, positives, negatives, infinity, NaN
  • Methoden wie + - %
  • Vergleiche wie < >
50
Q

Sollte man für Typen wie number oder boolean die Types inferen lassen und nicht explizit annotieren?

A
  • Ja, es gibt keinen Grund etwas als number zu annotieren

- Nur wenn man mit beschränkten Zahlenräumen arbeitet dann kann es Sinn machen

51
Q

Was macht der Type bigint?

A
  • Erlaubt hohe Zahlenoperationen ohne Rundungsfehler

- Sollte infered werden wenn möglich

52
Q

Was ist der Type string?

A
  • Das Set aller Strings

und Methodike dieser wie Konketanation Slice etc

53
Q

Sollten Strings von TypeScript infered oder explizit anmotiert werden?

A
  • Infered um den Code schmal zu halten
54
Q

Was ist der Type symbol?

A
  • Ist ziemlich neu in ES2015 und selten
  • Alternative für string keys in Objects und Maps
  • Verwendet man um sicherzustellen dass genau der richtige und bekannte key genutzt wird und nichts überschriebenes
55
Q

Was sind Type Objects in JavaScript?

A
  • ## TypeScript kann mit Absicht nicht zwischen Erzeugung mit new Object und { } unterscheiden
56
Q

Was ist Structual Typing oder Duck Typing?

A
  • Wenn man sich nur um die Eigenschaften und den Inhalt eines Objektes kümmert und nicht dessen Namen
57
Q

Was ist Nominal Typing?

A
  • Wenn man sich explizit auch für den Namen eines Objektes interessiert und nicht nur wie beim Duck Typing um dessen Eigenschaften/Inhalt
58
Q

Wie deklariert man eine variable als Type unknown?

A
  • Explizit

- let a: unknown = 30

59
Q

Wie deklariert man eine Variable als Type boolean?

A
  • Infered

- let b = true

60
Q

Wie deklariert man eine Variable vom Type number?

A
  • Infered

- let a = 1234

61
Q

Wie deklariert man eine Variable von Type bigint?

A
  • Infered wenn möglich

- let a = 1234n

62
Q

Wie deklariert man eine Variable vom Type string?

A
  • Infered

- let a = ‘hello’

63
Q

Wie deklariert man eine Variable vom Type symbol?

A
  • Infered

- let a = Symbol(‘a’)

64
Q

Was sind Probleme mit dem Type object?

A
  • Es ist erstmal nur wenig restriktiver als any

- Es definiert nur, dass etwas ein Object ist aber nicht was mit dem Inhalt getan werden kann

65
Q

Welche beiden Arten nutzt man zur Deklaration einer Variable von Type Object?

A
  • Infered
  • let a = { b: ‘x’ }

oder

  • Explizit
  • let a = { b: string } = { b: ‘x’ }
66
Q

Warum gibt es eine Type Inference bei Type Object und was ist es?

A
  • Tritt nur bei der Nutzung von const auf bei Dingen wie Objects oder Arrays auf
  • Man kann den Inhalt nach Deklarierung trotz const im Gegensatz zu Variablen noch dynamisch austauschen
  • Daher infered TypeScript bei const a = { b: number } = { b: 12 } // b ist number und nicht Literal 12
  • Um die Dynamik zu wahren wird nur der Typ und kein Literal des Wertes infered