mirror of
https://github.com/TheTaz25/denis.ergin.git
synced 2025-07-06 12:08:49 +00:00
feat(slides): first ts throw
This commit is contained in:
parent
054a8f67e6
commit
b56e5dc71d
8 changed files with 238 additions and 0 deletions
24
src/components/slides/typescript-beginner/basics.astro
Normal file
24
src/components/slides/typescript-beginner/basics.astro
Normal file
|
@ -0,0 +1,24 @@
|
|||
<section>
|
||||
<section>
|
||||
<h2>Erste Schritte mit TypeScript</h2>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Versehen wir nun mal einfache Variablen mit einer Typisierung</p>
|
||||
<pre class="ts"><code data-trim data-line-numbers>
|
||||
const x: number = 5;
|
||||
const y: string = "Hallo Welt!";
|
||||
const isFalse: boolean = false;
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>In TypeScript erhalten Variablen einen Typ, indem nach dem Namen ein Doppelpunkt mit der Typ-Deklaration folgt.</p>
|
||||
<p>Standard-Typen umfassen in der Regel <code>string, number, boolean, undefined, null</code>.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Bei der Interaktion mit den Variablen sollten nun Informationen zu den Variablen besser angezeigt werden.</p>
|
||||
<p>Sehen wir uns nun das Beispiel mit einer String-Variable an.</p>
|
||||
</section>
|
||||
</section>
|
46
src/components/slides/typescript-beginner/generics.astro
Normal file
46
src/components/slides/typescript-beginner/generics.astro
Normal file
|
@ -0,0 +1,46 @@
|
|||
<section>
|
||||
<section>
|
||||
<h2>Generics</h2>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Generics in TypeScript sind ein wichtiges Feature um Typen dynamisch festzulegen</p>
|
||||
<p>Im Grunde geben wir mit einem Generic an, das der <code>type</code> von außen festgelegt oder durch Code-Analyse automatisch bestimmbar ist.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Fangen wir einfach an: Wir wollen den <code>type</code> einer Eigenschaft eines Objekts frei einstellen:</p>
|
||||
<pre class="ts"><code data-trim data-line-numbers is:raw>
|
||||
type MyObject<T> = {
|
||||
value: T,
|
||||
};
|
||||
|
||||
const x: MyObject<number> = {
|
||||
value: 5,
|
||||
};
|
||||
const y: MyObject<string> = {
|
||||
value: 'Hallo!',
|
||||
};
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Fangen wir einfach an</p>
|
||||
<pre class="ts"><code data-trim data-line-numbers is:raw>
|
||||
const convertToString = (thing): string => {
|
||||
return thing.toString();
|
||||
}
|
||||
</code></pre>
|
||||
<p>Nicht alles kann mit <code>toString</code> in etwas nützliches konvertiert werden (z.B. Objekte). Deshalb wollen wir nun nur "Sinnvolle" Typen zulassen</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<pre class="ts"><code data-trim data-line-numbers is:raw>
|
||||
const convertToString = <T extends
|
||||
string | number | boolean | null | undefined
|
||||
>(thing: T): string => {
|
||||
return thing.toString();
|
||||
}
|
||||
</code></pre>
|
||||
</section>
|
||||
</section>
|
17
src/components/slides/typescript-beginner/index.astro
Normal file
17
src/components/slides/typescript-beginner/index.astro
Normal file
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
import Title from "./title.astro";
|
||||
import Introduction from "./introduction.astro";
|
||||
import Installation from "./installation.astro";
|
||||
import Basics from "./basics.astro";
|
||||
import Objects from "./objects.astro";
|
||||
import Generics from "./generics.astro";
|
||||
---
|
||||
|
||||
<div class="slides">
|
||||
<Title />
|
||||
<Introduction />
|
||||
<Installation />
|
||||
<Basics />
|
||||
<Objects />
|
||||
<Generics />
|
||||
</div>
|
30
src/components/slides/typescript-beginner/installation.astro
Normal file
30
src/components/slides/typescript-beginner/installation.astro
Normal file
|
@ -0,0 +1,30 @@
|
|||
<section>
|
||||
<section>
|
||||
<h2>Projekt-Setup mit TS</h2>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>Schnelles Setup mit Vite</h3>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Wenn wir ein Projekt mit Vite aufsetzen, können wir aus den vielen Templates von Vite wählen. Viele "Vanilla"-Templates haben auch eine TS-Variante mit der unnötiges Setup vermieden werden kann.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<pre class="sh"><code data-trim data-line-numbers>
|
||||
npm create vite@latest my-first-ts-app\
|
||||
-- --template vanilla-ts
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>In dem nun generierten Projekt sehen wir nun die ersten Unterschiede: Javascript-Dateien gibt es hier nicht mehr und sind mit <code>.ts</code> abgekürzt. Das sind entsprechende TypeScript-Dateien.</p>
|
||||
<p>TypeScript wird diese Dateien analysieren, und während der Build-Phase diese in JavaScript umwandeln, sodass dieser dann in nachgelagerten Schritten weiter prozessiert werden kann.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Euch wird wahrscheinlich eine tsconfig.json im Projekt aufgefallen sein.</p>
|
||||
<p>Dies ist die Konfigurations-Datei für TypeScript. Hier sind alle Einstellungen für den TypeScript-Compiler und können den eigenen Anforderungen entsprechend angepasst werden.</p>
|
||||
</section>
|
||||
</section>
|
32
src/components/slides/typescript-beginner/introduction.astro
Normal file
32
src/components/slides/typescript-beginner/introduction.astro
Normal file
|
@ -0,0 +1,32 @@
|
|||
<section>
|
||||
<section>
|
||||
<h2>Was ist TypeScript?</h2>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>TypeScript stellt im weitesten Sinne eine Erweiterung zu klassischem JavaScript dar. Hierbei wird JavaScript um ein Type-System erweitert.</p>
|
||||
<p>Die Types hierbei umfassen die normalen Datentypen wie <em>number</em>, <em>boolean</em>, oder <em>string</em>. Weitergehend können Objekte und Arrays mit Typen ausgestattet werden.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Ziel des ganzen ist es hierbei, JavaScript's fehleranfälliges Verhalten aufgrund der schlechten Typ-Information sicherer zu gestalten. TypeScript bietet bei der Entwicklung viele Vorteile wie z.B. Type-Hints, Error-Meldungen bei unbekannten Typen und mehr.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Da TypeScript nur eine Erweiterung darstellt, sind auch moderne Browser und JS-Parsende Systeme nicht in der Lage TypeScript zu verstehen. Für uns Entwickler heißt das konkret, dass wir unseren TypeScript (TS) Code vorher in JavaScript umwandeln müssen.</p>
|
||||
<p>Eine Ausnahme die sich zu dieser Aussage "anbahnt" ist NodeJS: Seit Version 23.8.0 ist NodeJS in der Lage, die Typ-Informationen aus der TS-Datei zu "strippen" und den Code der dahinter liegt auszuführen.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Für Browser ist aber fürs erste weiterhin eine Konvertierung von TS -> JS durchzuführen. Wann gängige Browser-Engines nachziehen ist noch nicht abzusehen.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Hierfür gibt es einen entsprechendes package auf npm: <code>typescript</code>.</p>
|
||||
<p>TypeScript wurde durch Microsoft eingeführt und wird auch durch Microsoft ständig weiter entwickelt.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Das <code>typescript</code> package ist ein Compiler der TypeScript Code analysiert, Fehlermeldungen auf Typen generiert und den Code letzten Endes zu JavaScript konvertiert.</p>
|
||||
</section>
|
||||
</section>
|
78
src/components/slides/typescript-beginner/objects.astro
Normal file
78
src/components/slides/typescript-beginner/objects.astro
Normal file
|
@ -0,0 +1,78 @@
|
|||
<section>
|
||||
<section>
|
||||
<h2>Objekte</h2>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>In TS gibt es 2 Varianten Objekte zu Typisieren. Dabei definieren wir die Form bzw die Eigenschaften (Properties) innerhalb des Objektes.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>Interfaces</h3>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Mit Interfaces definieren wir Objekte. Dabei können wir uns das <code>interface</code> noch am ehesten wie eine normale JavaScript-Klasse vorstellen, die später durch weitere Interfaces erweitert werden kann.</p>
|
||||
<pre class="ts"><code data-trim data-line-numbers is:raw>
|
||||
interface Point2D {
|
||||
x: number,
|
||||
y: number,
|
||||
};
|
||||
|
||||
const location: Point2D = {
|
||||
x: 5,
|
||||
y: 10,
|
||||
};
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
<p>Ein Interface kann nun mit einem bestehenden Interface "erweitert" (extended) werden.</p>
|
||||
<pre class="ts"><code data-trim data-line-numbers is:raw>
|
||||
interface Point3D extends Point2D {
|
||||
z: number,
|
||||
};
|
||||
|
||||
const location: Point3D = {
|
||||
x: 5,
|
||||
y: 10,
|
||||
z: 20,
|
||||
};
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>type</h3>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Ein <code>type</code> dient ähnlich zum interface dazu, ein Objekt zu definieren, beschränkt sich aber nicht darauf.</p>
|
||||
<pre class="ts"><code data-trim data-line-numbers is:raw>
|
||||
type Point2D = {
|
||||
x: number;
|
||||
y: number;
|
||||
};
|
||||
|
||||
// Mit dem "&" können wir mehrere types zusammenführen
|
||||
type Point3D = {
|
||||
z: number;
|
||||
} & Point2D;
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<p>Wie gesagt beschränkt sich eine <code>type</code>-Definition nicht nur auf Objekte, wir können zum Beispiel einen String auf bestimmte Werte "restriktieren".</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<pre class="ts"><code data-trim data-line-numbers is:raw>
|
||||
type Animal = "cat" | "dog" | "hamster";
|
||||
|
||||
const pet: Animal = "cat";
|
||||
|
||||
// Mischformen sind auch möglich
|
||||
type Falsy = null | undefined | "" | 0 | false;
|
||||
</code></pre>
|
||||
</section>
|
||||
</section>
|
3
src/components/slides/typescript-beginner/title.astro
Normal file
3
src/components/slides/typescript-beginner/title.astro
Normal file
|
@ -0,0 +1,3 @@
|
|||
<section>
|
||||
<h1>Einführung in TypeScript</h1>
|
||||
</section>
|
8
src/pages/slides/flexi-pool/01-typescript.astro
Normal file
8
src/pages/slides/flexi-pool/01-typescript.astro
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
import Reveal from "../../../layouts/Reveal.astro";
|
||||
import Slides from "../../../components/slides/typescript-beginner/index.astro";
|
||||
---
|
||||
|
||||
<Reveal title="TypeScript">
|
||||
<Slides />
|
||||
</Reveal>
|
Loading…
Add table
Add a link
Reference in a new issue