diff --git a/src/components/slides/typescript-beginner/basics.astro b/src/components/slides/typescript-beginner/basics.astro index a821c47..c146cb0 100644 --- a/src/components/slides/typescript-beginner/basics.astro +++ b/src/components/slides/typescript-beginner/basics.astro @@ -21,4 +21,25 @@

Bei der Interaktion mit den Variablen sollten nun Informationen zu den Variablen besser angezeigt werden.

Sehen wir uns nun das Beispiel mit einer String-Variable an.

+ +
+

Neben diesen normalen Datentypen, kennt TypeScript noch zwei weitere wichtige: any und unknown.

+
+ +
+

Sobald man any verwendet, gibt man dem TypeScript Type-Checker die Information, dass diese Variable nicht weiter beachtet werden soll. Für diese Variable wird also jegliches Type-Checking deaktiviert und wir erhalten keine Warnungen und Informationen mehr.

+

Als sichere alternative gibt es hierfür unknown. Hiermit teilen wir TypeScript mit, dass wir zum aktuellen Zeitpunkt nicht wissen, was das für ein Datentyp ist.

+
+ +
+

Wenn wir den Datentyp einer unknown Variable später eindeutig kennen, können wir diesen mit folgendem Code-Schnipsel konvertieren:

+

+			function x(y: unknown): number | undefined {
+				if (typeof y === 'number') {
+					return y as number;
+				}
+				return undefined;
+			}
+		
+
diff --git a/src/components/slides/typescript-beginner/functions.astro b/src/components/slides/typescript-beginner/functions.astro new file mode 100644 index 0000000..aa35ade --- /dev/null +++ b/src/components/slides/typescript-beginner/functions.astro @@ -0,0 +1,29 @@ +
+
+

Funktionen

+
+ +
+

Funktionen in TypeScript lassen sich einfach definieren. Wir verwenden dazu das Type-Keyword und geben eine Funktion ähnlich zu einer Standard-Arrow-Function an:

+

+      type MyFunction = () => void;
+    
+
+ +
+

In den runden Klammern können wir die notwendigen Parameter für die Funktion definieren:

+
+ +
+

+      type MyFunction = (paramA: string, paramB: string) => void;
+    
+
+ +
+

Der Rückgabe-Type wird nach dem "Fat-Arrow" definiert. void signalisiert, dass die Funktion keinen Wert zurückggibt.

+

+      type MyFunction = () => string;
+    
+
+
\ No newline at end of file diff --git a/src/components/slides/typescript-beginner/index.astro b/src/components/slides/typescript-beginner/index.astro index 3f3623f..70dbbe8 100644 --- a/src/components/slides/typescript-beginner/index.astro +++ b/src/components/slides/typescript-beginner/index.astro @@ -5,6 +5,7 @@ import Installation from "./installation.astro"; import Basics from "./basics.astro"; import Objects from "./objects.astro"; import Generics from "./generics.astro"; +import Functions from './functions.astro'; ---
@@ -14,4 +15,5 @@ import Generics from "./generics.astro"; +
\ No newline at end of file diff --git a/src/components/slides/typescript-beginner/installation.astro b/src/components/slides/typescript-beginner/installation.astro index 70372f7..bdde60b 100644 --- a/src/components/slides/typescript-beginner/installation.astro +++ b/src/components/slides/typescript-beginner/installation.astro @@ -13,7 +13,7 @@

-			npm create vite@latest my-first-ts-app\
+			npm create vite@latest my-first-ts-app
 				-- --template vanilla-ts
 		
diff --git a/src/components/slides/typescript-beginner/objects.astro b/src/components/slides/typescript-beginner/objects.astro index a1733a4..78da34f 100644 --- a/src/components/slides/typescript-beginner/objects.astro +++ b/src/components/slides/typescript-beginner/objects.astro @@ -75,4 +75,90 @@ type Falsy = null | undefined | "" | 0 | false; + +
+

Optionale Properties

+
+ +
+

Manchmal benötigen wir einzelne Properties in einem Objekt nicht immer, also können wir diese auch weg lassen.

+

In TypeScript werden optionale Properties in einem Objekt mit einem Fragezeichen markiert:

+

+			type MyObject = {
+				required: boolean;
+				optional?: boolean;
+			};
+		
+
+ +
+

Record

+
+ +
+

Der spezielle Type Record, ist ein generischer Type von TypeScript, der ein Objekt beschreiben kann.

+

Er nimmt 2 Parameter an: Einen Keys-Type und einen Value-Type.

+
+ +
+

+			type Keys = "cat" | "dog" | "hamster";
+			type Value = {
+				name: string;
+				age: number;
+			}
+
+			type Pets = Record<Keys, Value>;
+		
+
+ +
+

Dies erzeugt folgenden Typ:

+

+			type Pets = {
+				cat: Value,
+				dog: Value,
+				hamster: Value
+			}
+		
+

Jeder Key wird als Property mit dem angegebenen Value definiert!

+
+ +
+

typeof

+
+ +
+

Manchmal macht es Sinn, einen Datentypen (Interface oder Type) anhand eines bereits existierenden JavaScript-Objektes zu generieren.

+

Hierfür haben wir das keyword typeof. TypeScript wandelt bei der Verwendung eines JS-Ojbektes mit diesem keyword, in einen Datentypen um:

+
+ +
+

+			const myObject = {
+				key1: 'Hello',
+				key2: 'World', 
+			};
+			
+			const MyObject = typeof myObject;
+			/**
+			*	{
+			*		key1: string;
+			*		key2: string;
+			*	}
+			*/
+		
+
+ +
+

keyof

+
+ +
+

Das keyword keyof ist ein weiterer nützliches Tool. Damit können wir die property-keys aus einem Type extrahieren:

+

+			type Keys = keyof MyObject;
+			// Keys => 'key1' | 'key2';
+		
+