noImplicitReturns în TypeScript

Dă eroare când o funcție care întoarce o valoare pe unele ramuri se poate termina fără return pe altele.

Sintaxă
"compilerOptions": { "noImplicitReturns": true }

tsc --noImplicitReturns

Ce face noImplicitReturns

Dacă o funcție are return valoare pe unele ramuri, dar pe altele ajunge la final fără return, întoarce în tăcere undefined. Cu noImplicitReturns, TypeScript dă eroarea TS7030 („Not all code paths return a value”).

Fără opțiune, TypeScript deduce tipul rezultatului ca string | undefined și nu se plânge. Opțiunea te obligă să tratezi explicit fiecare caz, de obicei cu un return sau un throw la final.

Implicit este false și nu face parte din strict.

Parametri

Parametru Descriere
true Fiecare ramură a unei funcții care întoarce valori trebuie să aibă return.
false Valoarea implicită.

Exemple

Exemplul 1: O ramură uitată

Pentru o notă sub 5, funcția nu ajunge la niciun return.

// tsconfig.json
{
  "compilerOptions": {
    "noImplicitReturns": true
  }
}

// index.ts
function calificativ(nota: number) {
  if (nota >= 9) {
    return "Foarte bine";
  } else if (nota >= 5) {
    return "Promovat";
  }
}
console.log(calificativ(4));

Rezultat (tsc 5.9)

$ npx tsc --noEmit
index.ts(1,10): error TS7030: Not all code paths return a value.

Exemplul 2: Toate ramurile tratate

Ultimul return acoperă notele sub 5.

function calificativ(nota: number): string {
  if (nota >= 9) {
    return "Foarte bine";
  } else if (nota >= 5) {
    return "Promovat";
  }
  return "Nepromovat";
}

for (const nota of [10, 7, 4]) {
  console.log(nota, calificativ(nota));
}

Rezultat

10 Foarte bine
7 Promovat
4 Nepromovat

Greșeli frecvente

  • Să adaugi return undefined; la final doar ca să taci eroarea, când de fapt cazul nu ar trebui să existe. Mai clar este throw new Error(...).

Comenzi înrudite

  • noFallthroughCasesInSwitch: Dă eroare când un case care conține cod trece mai departe în următorul case fără break sau return.
  • strictNullChecks: Face din null și undefined tipuri separate: o valoare care poate lipsi trebuie verificată înainte de folosire.
  • noUnusedLocals: Dă eroare pentru variabilele locale, importurile și funcțiile declarate, dar niciodată citite.