void în TypeScript

Tipuri de bază TypeScript 1.0

Tipul returnat de funcțiile care nu întorc nicio valoare utilă, de exemplu cele care doar afișează ceva.

Sintaxă
function f(): void { ... }
type Callback = (x: number) => void;

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 void la o funcție async. Tipul corect este Promise<void>; altfel tsc se plânge că tipul returnat al unei funcții asincrone trebuie să fie Promise.

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.