webroad.online
  1. 1Web
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Unelte
  8. 8React
  9. 9State management
  10. 10Next.js
  11. 11Formulare
  12. 12Date și backend
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Animații
  16. 16Testare
  17. 17Arhitectură
TypeScript · Lecția 5 din 6

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âmpuri

Cele 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 rescrii

as 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 const pentru liste de literale; satisfies pentru verificare fără lărgire.

Surse oficiale

Exerciții

Ți-a fost utilă pagina?

Un click — fără cont.