- Parameter
title
undbody
sind potentiellundefined
. ??
Operator sorgt dafür, dass bei einem Leerstring der Wert geleert wird.
never
Type bei Error
- Enum
UserRank
vs String-Literal-Union UserService.getUserRank
mit Bug, dassawait
vorthis.loadUser
fehlt.- Zeigen wie wir mit discriminated Unions die richtige Funktion aufrufen (siehe TODO)
interface InternalUser { name: string; type: "INTERNAL"; } interface ExternalUser { name: string; type: "EXTERNAL"; }
- formatPhoneNumber für Generics
- Es geht ein Internal oder External User rein und kommt entsprechend wieder raus.
- Wenn wir dem Generic ein
extends {phone: string}
machen, dann ist es total egal, was reingeht, solange es einphone
hat (User, Company, Deparment, ...). - Es nennt sich type argument inference, wenn wir den Typen nicht explizit angeben müssen.
- Theoretisch können wir auch ein
interface PhoneAble { phone: string }
machen und das als Type-Argument übergeben. Aber dadurch verlieren wir den Return-Type.
domain/search.js
- Bonusaufgabe das korrekt mit Generics zu typen.
- Lernblock: Grundlagen
- Promises und async/await
- .js -> .ts
- api/users.js
- types.ts
- ALLE: api/post.js
- Lernblock: Class vs Function
- Class als Datenstruktur in Type überführen (class User)
- In JS sinnvoll, weil wir keine Typen haben und dadurch nicht festlegen können, wie ein Objekt aussehen soll
- domain/userService.js typen
- domain/userService.js class entfernen
- ALLE: domain/postService.js typen + class entfernen
- Bonus: dashboard.js typen // TODO: Noch mehr hinzufügen?
- Class als Datenstruktur in Type überführen (class User)
- Lernblock: Generics und Co
- domain/getUserRank.js -> UserRank Type einführen und auch für getUserRank nutzen
- InternalUser und ExternalUser Type einführen
- ALLE: domain/setUserType.js
- ALLE: domain/updateUserRanks.js
- domain/formatPhoneNumber.js (brauchen wir das noch?)
- ALLE: domain/user.js -> mapUserData + getUserNames
- Bonus: domain/search.js
any
vsunknown
vsnever
erklären
- Lernblock: Types beim Testen
- TODO: ???
- Test-Cases vorschreiben
- Partial erklären
as X
- Mocks
- Lernblock: Tooling
- TODO: ???
- TypeScript
strict: true
- TypeScript richtig nutzennoEmit: true
-tsc
nur für Typ-Prüfung,vite
für BuildnoImplicitAny: true
- Impliziteany
vermeiden
@types/<dependency>
const a: Type = callJavaScriptFunctionWithoutTypes()
- Externe Typ-Definitionen, weil manche Projekte keine Typen mitliefern
- (
ReturnType<typeof function>
- ReturnType von einer Funktion ermitteln) - (
export type StatusId = (typeof Status)[keyof typeof Status]["id"];
) - TODO:
type.d.ts
Dateien???
- ESLint
- Unabhängig von TypeScript
@typescript-eslint
-Plugin bringt die wichtigsten Regeln für TypeScript mit- Hilft dabei, Framework-Regeln einzuhalten (z.B. React-Hooks)
- Erlaubt durch import-Regeln, dass Projekt-Bereiche nicht aufeinander zugreifen dürfen
- Offene TODOs:
- Brauchen wir eine kurze Übersicht, zu unserer Domain?
- Brauchen wir Sub-Dirs in /domain?
Promise
,.then
undawait
behandeln- Svelt und Immutable bzw. Re-Render bei State-Änderungen
- README anpassen
git clone
npm
stattbun
bun check
aufmain
grün machentype
vsinterface
(für uns gerade ziehen im Code)- Try-Catch für APIs (
response.ok
)
- Ein Cheat-Sheet drucken, mit den Key-Learnings des Workshops?
- Oder
Learnings.md
erstellen
- Oder