Ce face void
void se folosește ca tip returnat pentru funcțiile care fac o acțiune (afișează, salvează, modifică) și nu întorc nimic. La rulare, o astfel de funcție întoarce undefined. Dacă nu scrii tipul, TypeScript deduce void singur când funcția nu are return cu valoare.
Într-un tip de funcție, () => void are un sens mai larg: „nu-mi pasă ce returnezi”. De aceea poți da lui forEach o funcție care returnează un număr, de exemplu lista.forEach(x => total.push(x)) (push returnează lungimea). Regula este diferită la o declarație directă: o funcție declarată (): void nu are voie să returneze o valoare.
Pentru funcțiile asincrone fără rezultat, tipul este Promise<void>.
Exemple
Exemplul 1: Funcție care doar afișează
Rezultatul apelului este undefined, iar tipul lui este void.
function salut(nume: string): void {
console.log(`Bună, ${nume}!`);
}
const r = salut("Ana");
console.log(r);
async function salveaza(nota: number): Promise<void> {
console.log("Salvez nota", nota);
}
await salveaza(10);
Rezultat
Bună, Ana!
undefined
Salvez nota 10
Exemplul 2: Callback cu tipul () => void
Tipul (x: number) => void acceptă și funcții care returnează ceva; valoarea lor este ignorată.
function pentruFiecare(lista: number[], f: (x: number) => void): void {
for (const x of lista) f(x);
}
const dublate: number[] = [];
pentruFiecare([1, 2, 3], (x) => dublate.push(x * 2)); // push returnează un număr, este permis
console.log(dublate);
Rezultat
[ 2, 4, 6 ]
Exemplul 3: O funcție void nu poate returna o valoare
function afiseaza(x: number): void {
console.log(x);
return x;
}
afiseaza(3);
Eroarea afișată de tsc
exemplu.mts(3,5): error TS2322: Type 'number' is not assignable to type 'void'.
Greșeli frecvente
- Folosești rezultatul unei funcții
void(if (salut("Ana"))). tsc dă eroarea An expression of type ‘void’ cannot be tested for truthiness. - Scrii
voidla o funcțieasync. Tipul corect estePromise<void>; altfel tsc se plânge că tipul returnat al unei funcții asincrone trebuie să fiePromise.
Comenzi înrudite
never: Tipul fără nicio valoare: pentru funcții care nu se termină normal și pentru cazurile imposibile din cod.funcții cu tipuri: Pui tipuri pe parametrii și pe rezultatul funcțiilor; fiecare apel este verificat la compilare.null și undefined: Cu strictNullChecks, null și undefined sunt tipuri separate: o variabilă le acceptă doar dacă tipul ei le include.Promise<T>: Tipul unei valori care va fi disponibilă mai târziu; T este tipul rezultatului, nu și al erorii.