Parametri de Tip const în TypeScript 5.0+ (<const T>) în TypeScript

Ghid complet pentru parametrii de tip const introduși în TypeScript 5.0: inferență automată ca readonly și tupluri literale fără a forța apelantul să folosească 'as const'.

Sintaxă
function definesteRute<const T extends readonly string[]>(rute: T): T { return rute; }

Înainte de TypeScript 5.0, când trimiteai un array sau un obiect literal ca argument unei funcții generice, TypeScript îi lărgea automat tipul (de exemplu, un array de șiruri ['acasa', 'despre'] era inferat ca string[], nu ca tuplu de literale). Pentru a forța inferența exactă, erai obligat să adaugi as const la fiecare apel de funcție. Modificatorul const pe parametrii de tip generic mută această responsabilitate de la apelant la autorul funcției.

Problema clasică vs. Parametri de Tip const în TypeScript 5.0
// FUNCȚIE GENERICE CLASICĂ:
function creazaMeniuClasic<T extends readonly string[]>(elemente: T): T {
    return elemente;
}
const meniu1 = creazaMeniuClasic(['acasa', 'contact']);
// meniu1 este inferat ca: string[] (tip lărgit, am pierdut valorile specifice!)

// NOU ÎN TYPESCRIPT 5.0+: PARAMETRU DE TIP const T
function creazaMeniuModern<const T extends readonly string[]>(elemente: T): T {
    return elemente;
}
const meniu2 = creazaMeniuModern(['acasa', 'contact']);
// meniu2 este inferat AUTOMAT ca: readonly ["acasa", "contact"] (fără niciun 'as const')!

Utilizare Avansată: Extragerea Cheilor din Obiecte Literale

Parametrii de tip const sunt extrem de puternici atunci când construiți librării, routere sau sisteme de configurare de tip Schema, unde aveți nevoie ca proprietățile unui obiect să devină uniuni literale de tipuri:

Definirea de rute tipate strict pentru un Router Web
interface ConfiguratieRuta {
    cale: string;
    titlu: string;
}

function configureazaRouter<const T extends Record<string, ConfiguratieRuta>>(config: T) {
    return {
        navigheazaLa: (nume: keyof T) => {
            console.log(`Navigare la ruta: ${config[nume].cale}`);
        }
    };
}

const router = configureazaRouter({
    dashboard: { cale: '/panou', titlu: 'Panou Principal' },
    utilizatori: { cale: '/users', titlu: 'Gestiune Utilizatori' }
});

// Autocompletare inteligentă: parametrul poate fi DOAR 'dashboard' | 'utilizatori'!
router.navigheazaLa('dashboard'); // Valid
// router.navigheazaLa('setari'); // EROARE DE COMPILARE: Argument of type '"setari"' is not assignable to parameter of type '"dashboard" | "utilizatori"'.

Reguli și Limitări Importante

  • Modificatorul const afectează doar datele literale (array-uri [...], obiecte {...}, numere, string-uri) transmise direct în apelul funcției. Dacă transmiteți o variabilă declarată anterior cu let, valoarea nu va fi înghețată automat ca tuplu.
  • Obiectele inferate prin parametri de tip const devin proprietăți readonly, prevenind modificările accidentale prin mutație.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Parametri de Tip const în TypeScript 5.0+ (<const T>)

Ai o nelămurire despre utilizarea comenzii Parametri de Tip const în TypeScript 5.0+ (<const T>) sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.