# Les 5: TypeScript Basics --- ## Hoofdstuk **Deel 2: Technical Foundations** (Les 5-9) ## Beschrijving Introductie tot TypeScript voor React developers. Leer waarom TypeScript waardevol is, hoe je types schrijft, en hoe je het combineert met React. --- ## Te Behandelen ### Waarom TypeScript? **Het probleem met JavaScript:** ```javascript function greet(name) { return "Hello, " + name.toUpperCase(); } greet(42); // Runtime error! 42.toUpperCase is not a function ``` **De oplossing met TypeScript:** ```typescript function greet(name: string): string { return "Hello, " + name.toUpperCase(); } greet(42); // Compile error! Argument of type 'number' is not assignable to type 'string' ``` **Voordelen:** - Fouten vinden VOORDAT je code runt - Betere autocomplete in je editor - Code is zelf-documenterend - AI tools begrijpen je code beter --- ### Basic Types ```typescript // Primitives let name: string = "Tim"; let age: number = 25; let isStudent: boolean = true; // Arrays let numbers: number[] = [1, 2, 3]; let names: string[] = ["Tim", "Anna"]; // Alternative array syntax let scores: Array = [90, 85, 88]; // Objects let user: { name: string; age: number } = { name: "Tim", age: 25 }; ``` --- ### Type Inference TypeScript raadt types vaak zelf: ```typescript // TypeScript weet dat dit een string is let message = "Hello"; // type: string // TypeScript weet dat dit een number is let count = 42; // type: number // TypeScript weet wat de functie returned function double(x: number) { return x * 2; // return type: number (inferred) } ``` **Regel:** Je hoeft niet altijd types te schrijven. Laat TypeScript inferren waar mogelijk. --- ### Interfaces Voor het beschrijven van object shapes: ```typescript interface User { id: number; name: string; email: string; isActive: boolean; } const user: User = { id: 1, name: "Tim", email: "tim@example.com", isActive: true }; // Optional properties met ? interface Product { id: number; name: string; price: number; description?: string; // optioneel } ``` --- ### Type Aliases Alternatief voor interfaces, meer flexibel: ```typescript // Type alias voor object type User = { id: number; name: string; }; // Type alias voor union types type Status = "pending" | "approved" | "rejected"; // Type alias voor functie type GreetFunction = (name: string) => string; ``` **Interface vs Type:** - Interface: voor objecten, kan extended worden - Type: voor alles, meer flexibel --- ### TypeScript met React **Props typen:** ```typescript // Interface voor props interface ButtonProps { label: string; onClick: () => void; disabled?: boolean; } // Component met typed props function Button({ label, onClick, disabled = false }: ButtonProps) { return ( ); } // Gebruik ); } ``` Zet dit om naar TypeScript: 1. Maak `Product` interface 2. Maak `ProductCardProps` interface 3. Type de component 4. Fix alle TypeScript errors **Deel 2: Interfaces Schrijven (30 min)** Maak interfaces voor: 1. **User** met: id, name, email, avatar (optioneel), createdAt 2. **Product** met: id, name, price, description (optioneel), inStock, category 3. **Order** met: id, userId, products (array), total, status (pending/shipped/delivered) **Deel 3: React Component met Types (45 min)** Bouw een `UserList` component: - Props: users array, onSelectUser callback - State: selectedUserId (number of null) - Toon lijst van users, highlight geselecteerde Alle types moeten correct zijn. Geen `any` gebruiken! ### Deliverable - ProductCard.tsx met correcte types - types.ts met alle interfaces - UserList.tsx volledig getypt --- ## Huiswerk (2 uur) ### TypeScript Verdieping **Deel 1: Drie Components Bouwen (1 uur)** Bouw volledig in TypeScript: 1. **SearchInput** component - Props: value, onChange, placeholder (optioneel) - Volledig getypt 2. **DataTable** component - Generic: werkt met elk type data - Props: data array, columns config - Type-safe rendering 3. **Modal** component - Props: isOpen, onClose, title, children - Correct gebruik van React.ReactNode **Deel 2: Eindproject Interfaces (30 min)** Bedenk de data structuur voor je eindproject: - Welke entiteiten heb je? (users, posts, products, etc.) - Maak interface voor elke entiteit - Documenteer relaties tussen entiteiten **Deel 3: Cheat Sheet (30 min)** Maak persoonlijke TypeScript cheat sheet: - Meest gebruikte types - Interface vs Type wanneer - Common patterns met React - Hoe je errors oplost ### Deliverable - 3 TypeScript components - types/index.ts met eindproject interfaces - TypeScript cheat sheet (1 pagina) --- ## Leerdoelen Na deze les kan de student: - Uitleggen waarom TypeScript waardevol is - Basic types gebruiken (string, number, boolean, arrays) - Interfaces en type aliases schrijven - React components typen met props - useState met types gebruiken - Generics op basisniveau begrijpen - JavaScript code omzetten naar TypeScript - TypeScript errors lezen en oplossen