Utility types, as const, satisfies
Partial, Pick, Omit, Record, ReturnType și tipuri derivate din valori.
Actualizat
Ce sunt utility types
TS vine cu tipuri gata făcute care transformă alte tipuri. În loc să rescrii User în 5 variante (pentru creare, update, afișare), le derivi dintr-un singur User. Avantaj: modifici User o dată, toate variantele se actualizează.
type User = { id: number; name: string; email: string; password: string }
type UserUpdate = Partial<User> // toate opționale
type PublicUser = Omit<User, 'password'> // fără parolă
type UserPreview = Pick<User, 'id' | 'name'> // doar câteva câmpuriCele mai folosite — ce fac și când
| Utility | Ce face | Când |
|---|---|---|
Partial<T> |
toate câmpurile opționale | patch / update parțial, valori implicite |
Required<T> |
toate obligatorii | după ce ai completat default-urile |
Readonly<T> |
toate readonly |
config, state pe care nu-l modifici |
Pick<T, K> |
doar cheile K |
props pentru o componentă mică |
Omit<T, K> |
tot în afară de K |
scoți câmpuri sensibile sau generate (id) |
Record<K, V> |
obiect cu cheile K și valori V |
dicționare, mapări |
ReturnType<F> |
tipul returnat de o funcție | tipezi din cod existent |
Parameters<F> |
tuple cu tipurile parametrilor | wrappere peste funcții |
Awaited<T> |
tipul din interiorul unui Promise | Awaited<ReturnType<typeof getUser>> |
NonNullable<T> |
scoate null și undefined |
după o verificare |
typeof și keyof — tipuri din valori
const config = { theme: 'dark', lang: 'ro' }
type Config = typeof config // { theme: string; lang: string }
type ConfigKey = keyof Config // 'theme' | 'lang'
async function getUser(id: number) { ... }
type UserData = Awaited<ReturnType<typeof getUser>> // tipul real, fără să-l rescriias const — valori ca literale
const ROLES = ['admin', 'editor', 'viewer'] as const
type Role = (typeof ROLES)[number] // 'admin' | 'editor' | 'viewer'O singură listă e și valoare la runtime (pentru un <select>), și tip la compile time. Fără duplicare.
satisfies — verificare fără să pierzi tipul exact
const routes = {
home: '/',
blog: '/blog',
} satisfies Record<string, string>
routes.home // tipul rămâne exact '/', nu string
routes.shop // ✗ nu existăconst x: T = ... |
const x = ... satisfies T |
|
|---|---|---|
| Verifică forma | da | da |
Tipul lui x |
T (mai larg) | cel exact din valoare |
Pe scurt
- Derivă tipuri din unul singur:
Partial,Pick,Omit,Record. typeof/ReturnType/Awaited— tipuri din cod existent.as constpentru liste de literale;satisfiespentru verificare fără lărgire.