suppressExcessPropertyErrors în TypeScript

tsconfig: opțiuni scoase (compatibilitate) TypeScript 1.6 (scoasă în 5.5)

Opțiuni scoase care ascundeau erorile pentru proprietăți în plus și pentru indexare cu any implicit.

Sintaxă
// scoase; erorile se repară în cod

Ce face suppressExcessPropertyErrors

Opțiunea face parte din „Backwards Compatibility”: a fost marcată ca depreciată în TypeScript 5.0 și scoasă în TypeScript 5.5. În tsc 5.9, prezența ei în tsconfig.json dă eroarea TS5102, iar "ignoreDeprecations": "5.0" nu mai ajută. Șterge-o din configurație.

suppressExcessPropertyErrors ascundea eroarea TS2353, care apare când un obiect scris direct are o proprietate pe care tipul nu o are (de obicei o greșeală de scriere). suppressImplicitAnyIndexErrors ascundea erorile noImplicitAny la indexarea unui obiect cu o cheie oarecare (TS7053). Ambele erau folosite la migrarea proiectelor vechi.

Astăzi, erorile se repară în cod: adaugi proprietatea în tip, scoți proprietatea în plus, folosești Record<string, T> sau keyof typeof obiect pentru chei. Dacă trebuie, un singur rând se poate marca cu // @ts-expect-error.

Parametri

Parametru Descriere
suppressExcessPropertyErrors Scoasă.
suppressImplicitAnyIndexErrors Scoasă.

Exemple

Exemplul 1: Erorile pe care le ascundeau

Proprietatea culoare nu există în Produs. Verificarea se face doar pentru obiectele scrise direct; q primește o variabilă și nu dă eroare. Al doilea rezultat: indexarea cu un string oarecare, cu strict.

// index.ts
interface Produs { nume: string; pret: number }

const p: Produs = { nume: "pâine", pret: 5, culoare: "albă" };
const date = { nume: "lapte", pret: 8, culoare: "albă" };
const q: Produs = date;
console.log(p, q);

// index2.ts
const preturi = { paine: 5, lapte: 8 };
const cheie: string = "paine";
console.log(preturi[cheie]);

Rezultat (tsc 5.9)

$ npx tsc          # index.ts
index.ts(3,45): error TS2353: Object literal may only specify known properties, and 'culoare' does not exist in type 'Produs'.

$ npx tsc          # index2.ts, cu "strict": true
index2.ts(3,13): error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ paine: number; lapte: number; }'.
  No index signature with a parameter of type 'string' was found on type '{ paine: number; lapte: number; }'.

$ npx tsc          # cu "suppressExcessPropertyErrors": true
tsconfig.json(3,5): error TS5102: Option 'suppressExcessPropertyErrors' has been removed. Please remove it from your configuration.

Exemplul 2: Codul reparat

Tipul descrie toate proprietățile, iar cheile sunt verificate cu in și keyof typeof.

interface Produs { nume: string; pret: number; culoare?: string }

const p: Produs = { nume: "pâine", pret: 5, culoare: "albă" };
console.log(p.nume, p.culoare);

const preturi = { paine: 5, lapte: 8 };
function pretul(cheie: string): number | undefined {
  return cheie in preturi ? preturi[cheie as keyof typeof preturi] : undefined;
}
console.log(pretul("paine"), pretul("cafea"));

Rezultat

pâine albă
5 undefined

Greșeli frecvente

  • Să repari TS2353 cu as Produs. Greșeala de scriere rămâne ascunsă; scoate sau declară proprietatea.

Comenzi înrudite

  • noImplicitAny: Dă eroare când TypeScript nu poate deduce un tip și ar folosi în tăcere any (de obicei la parametrii fără tip).
  • noUncheckedIndexedAccess: Adaugă undefined la tipul valorilor citite cu index (note[0], stoc[„pere”]), pentru că ele pot lipsi.
  • strict: Pornește dintr-o singură mișcare toate verificările stricte de tipuri (strictNullChecks, noImplicitAny și celelalte).