noStrictGenericChecks în TypeScript

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

Opțiune scoasă care slăbea verificarea compatibilității între tipuri de funcții generice.

Sintaxă
// scoasă; verificarea generică strictă este mereu activă

Ce face noStrictGenericChecks

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.

TypeScript 2.4 a introdus o verificare mai strictă a funcțiilor generice: când compară <T>(x: T[]) => T cu <T>(x: T) => T, ține cont de legătura dintre parametri și rezultat. noStrictGenericChecks permitea revenirea la comportamentul vechi, mai permisiv, pentru cod care nu trecea de noua verificare.

Astăzi verificarea strictă este mereu activă. Codul care nu trece trebuie corectat, de obicei cu tipuri generice mai precise.

Parametri

Parametru Descriere
noStrictGenericChecks Scoasă. Dă TS5102.

Exemple

Exemplul 1: Ce verifică tsc oricum

B cere un tablou, A trimite un singur element. Atribuirea este refuzată.

// index.ts
type A = <T>(x: T) => T;
type B = <T>(x: T[]) => T;
let a: A = x => x;
let b: B = x => x[0]!;
a = b;
console.log(a, b);

Rezultat (tsc 5.9)

$ npx tsc
index.ts(5,1): error TS2322: Type 'B' is not assignable to type 'A'.
  Types of parameters 'x' and 'x' are incompatible.
    Type 'T' is not assignable to type 'T[]'.

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

Greșeli frecvente

  • Să cauți o opțiune care să oprească eroarea. Nu mai există; repară tipurile.

Comenzi înrudite

  • strictFunctionTypes: Verifică corect parametrii când atribui o funcție altui tip de funcție (fără bivarianță la parametri).
  • strict: Pornește dintr-o singură mișcare toate verificările stricte de tipuri (strictNullChecks, noImplicitAny și celelalte).