Utility types jsou vestavěné generické typy, které transformují stávající typy, takže odvozujete nové typy místo jejich nového definování. Udržují typy DRY a v synchronizaci s jejich zdrojem.
ts
interface User { id: number; name: string; email: string; age: number; }
Partial<User>; // all properties optional → for update payloads
Required<User>; // all properties required
Readonly<User>; // all properties readonly
Pick<User, "id" | "name">; // { id, name } — keep only these
Omit<User, "id">; // everything except id → for create payloads
Proč je odvozování lepší než redefinice
ts
// Update endpoint: accept any subset of fields
function update(id: number, changes: Partial<User>) { ... }
update(1, { name: "New" }); // ✅ only the fields you change
// Create endpoint: everything except the server-generated id
type CreateUser = Omit<User, "id">;
Pokud přidáte pole do User, všechny se automaticky aktualizují — žádná druhá definice, kterou byste mohli zapomenout.
Další užitečné typy
ts
Record<string, number>; // { [key: string]: number } — dictionaries
ReturnType<typeof fn>; // the return type of a function
Parameters<typeof fn>; // tuple of a function's parameter types
NonNullable<string | null>; // string (strips null/undefined)
Extract<T, U>; Exclude<T, U>; // filter members of a union
Proč je to důležité
Utility types vám umožňují deklarativně vyjádřit vztahy mezi typy ("formulář pro vytvoření je uživatel minus id").
Snižují duplikaci, automaticky udržují odvozené typy v souladu se svým zdrojem a jsou všude v reálných kódech — zejména Partial pro aktualizace, Omit/Pick pro DTO a Record pro mapy.
