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).