diff --git a/src/07-funktionsprogrammierung/generics.ts b/src/07-funktionsprogrammierung/generics.ts new file mode 100644 index 0000000..07a6214 --- /dev/null +++ b/src/07-funktionsprogrammierung/generics.ts @@ -0,0 +1,91 @@ +function getFirstElement(arr: any[]): any { + return arr[0]; +} + +const first = getFirstElement(['Hello', 'World']); +console.log(first.toUpperCase()); + +function getFirstElementGeneric(arr: T[]): T { + return arr[0]; +} +const array = ['Hello', '1', 'World']; +const firstGen = getFirstElementGeneric(array); +console.log(firstGen.length); + +class UserRepository { + private users: string[] = []; + + add(user: string) { + this.users.push(user); + } + + getAll(): string[] { + return this.users; + } +} + +class Repository { + private items: T[] = []; + + add(item: T) { + this.items.push(item); + } + + getAll(): T[] { + return this.items; + } +} + +const userRepo = new Repository<{ name: string; age: number }>(); +userRepo.add({ name: 'Alice', age: 28 }); +userRepo.add({ name: 'Bob', age: 42 }); + +console.log(userRepo.getAll()); + +async function fetchData(url: string): Promise { + const response = await fetch(url); + return response.json(); +} + +type User = { + id: number; + name: string; +}; + +export async function getUsers() { + const user = await fetchData( + 'https://jsonplaceholder.typicode.com/posts/1' + // 'https://jsonplaceholder.typicode.com/users/1' + // 'https://jsonplaceholder.typicode.com/users/1' + ); + console.log(user.name); +} + +// getUsers(); + +function logLength( + item: TKey, + num?: TValue +): void { + console.log(item.length); +} + +logLength('Hallo', 42); +logLength(['a', 'b']); +logLength(42); + +const obj = { + name: 'Alice', + age: 22, +}; + +console.log(Object.keys(obj)); +console.log(Object.getOwnPropertyNames(obj)); + +function identity(value: T): T { + return value; +} + +function identity(value) { + return value; +}