noUnusedLocals în TypeScript

Dă eroare pentru variabilele locale, importurile și funcțiile declarate, dar niciodată citite.

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

tsc --noUnusedLocals

Ce face noUnusedLocals

Cu noUnusedLocals, orice variabilă locală, import, funcție sau tip local declarat și nefolosit dă eroarea TS6133 („is declared but its value is never read”). Codul rămas după modificări iese astfel la iveală.

Variabilele al căror nume începe cu _ nu sunt iertate de această opțiune (spre deosebire de parametri). Exporturile nu contează ca locale: o funcție exportată și nefolosită în fișier nu dă eroare. Fără opțiune, editorul arată doar numele nefolosite mai estompat.

Implicit este false și nu face parte din strict. tsc --init o pune comentată, la „Style Options”. Exemplele de pe acest site sunt verificate cu --noUnusedLocals.

Parametri

Parametru Descriere
true Variabilele, importurile, funcțiile și tipurile locale nefolosite dau eroare.
false Valoarea implicită. Nu se verifică.

Exemple

Exemplul 1: Import și variabilă nefolosite

readFileSync este importat degeaba, iar tva este calculat, dar nu este folosit (probabil o greșeală: totalul ar trebui să includă TVA-ul).

// tsconfig.json
{
  "compilerOptions": {
    "noUnusedLocals": true,
    "target": "es2022",
    "module": "nodenext",
    "types": ["node"]
  }
}

// index.ts
import { readFileSync } from "node:fs";

function total(preturi: number[]) {
  const tva = 0.19;
  let suma = 0;
  for (const p of preturi) suma += p;
  return suma;
}
console.log(total([10, 20]));
export {};

Rezultat (tsc 5.9)

$ npx tsc --noEmit
index.ts(1,1): error TS6133: 'readFileSync' is declared but its value is never read.
index.ts(4,9): error TS6133: 'tva' is declared but its value is never read.

Exemplul 2: Codul corectat

Fără import inutil, iar tva este folosit în calcul.

function total(preturi: number[]): number {
  const tva = 0.19;
  let suma = 0;
  for (const p of preturi) suma += p;
  return Math.round(suma * (1 + tva) * 100) / 100;
}
console.log(`Total cu TVA: ${total([10, 20])} lei`);

Rezultat

Total cu TVA: 35.7 lei

Greșeli frecvente

  • Să pornești opțiunea în timpul dezvoltării și să te enervezi la fiecare variabilă temporară. Mulți o pornesc doar în CI sau la build, nu și în modul --watch.
  • Să crezi că un nume cu _ la început scapă de eroare la variabile locale. Regula cu _ se aplică doar parametrilor (noUnusedParameters) și elementelor din destructurare.

Comenzi înrudite

  • noUnusedParameters: Dă eroare pentru parametrii de funcții care nu sunt folosiți; numele care încep cu _ sunt permise.
  • allowUnreachableCode: Controlează ce face tsc cu codul imposibil de atins și cu etichetele nefolosite: eroare, avertisment în editor sau nimic.
  • strict: Pornește dintr-o singură mișcare toate verificările stricte de tipuri (strictNullChecks, noImplicitAny și celelalte).