From 02b14c8b0f04592cb4d8ade6be3ee0ef05f91cf7 Mon Sep 17 00:00:00 2001 From: miqlangelo Date: Tue, 6 May 2025 11:18:10 +0200 Subject: [PATCH] update --- .../KATA2/solution.ts | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/05-forgeschrittenes-typsystem/KATA2/solution.ts diff --git a/src/05-forgeschrittenes-typsystem/KATA2/solution.ts b/src/05-forgeschrittenes-typsystem/KATA2/solution.ts new file mode 100644 index 0000000..ef3cca1 --- /dev/null +++ b/src/05-forgeschrittenes-typsystem/KATA2/solution.ts @@ -0,0 +1,74 @@ +export {}; + +// 1. NonNullableProps +type Response = { success: boolean; message?: string }; +type NonNullableProps = { [K in keyof T]: NonNullable }; +type NonNullableResponse = NonNullableProps; +// { success: boolean; message: string; } + +// 2. ReadonlyExcept +type Event = { timestamp: number; type: string }; +type ReadonlyExcept = { + readonly [P in Exclude]: T[P]; +} & { [P in K]: T[P] }; +type ReadonlyExceptType = ReadonlyExcept; +// { readonly timestamp: number; type: string; } + +// 3. KeysOfType +type Settings = { darkMode: boolean; isActive: boolean; fontSize: number }; +type KeysOfType = { [K in keyof T]: T[K] extends U ? K : never }[keyof T]; +type KeysWithBoolean = KeysOfType; +// "darkMode" | "isActive" + +// 4. NumberKeys +type Employee = { id: number; name: string; salary: number }; +type NumberKeys = { + [K in keyof T]: T[K] extends number ? K : never; +}[keyof T]; +type KeysWithNumbers = NumberKeys; +// "id" | "salary" + +// 5. ReturnTypeOf +type FetchFn = () => Promise; +type ReturnTypeOf = T extends (...args: any[]) => infer R ? R : never; +type FetchResult = ReturnTypeOf; +// Promise + +// 6. FilterStrings +type Values = { a: string; b: number; c: boolean }; +type FilterStrings = { + [K in keyof T as T[K] extends string ? K : never]: T[K]; +}; +type OnlyStrings = FilterStrings; +// { a: string; } + +// 7. FunctionKeys +type Button = { text: string; onClick: () => void }; +type FunctionKeys = { + [K in keyof T]: T[K] extends Function ? K : never; +}[keyof T]; +type FnKeys = FunctionKeys