checkJs în TypeScript

Raportează erorile de tip și în fișierele .js, folosind tipurile deduse și comentariile JSDoc.

Sintaxă
"compilerOptions": {
  "allowJs": true,
  "checkJs": true
}

Ce face checkJs

Cu checkJs, tsc verifică fișierele .js la fel ca pe cele .ts: proprietăți scrise greșit, argumente de tip greșit, valori care nu se potrivesc cu tipul din JSDoc (@type, @param). Poți primi multe din avantajele TypeScript fără să redenumești fișierele.

Se folosește împreună cu allowJs. Pentru un singur fișier, fără opțiune, scrii // @ts-check pe primul rând; invers, // @ts-nocheck oprește verificarea într-un fișier, iar // @ts-expect-error sau // @ts-ignore o opresc pentru rândul următor. Implicit: false.

Parametri

Parametru Descriere
true Fișierele .js din program sunt verificate.
false Valoarea implicită. Doar fișierele cu // @ts-check sunt verificate.

Exemple

Exemplul 1: Erori într-un fișier JavaScript

Tabloul are tipul dat în JSDoc, deci prețul text este refuzat. lenght este scris greșit, iar livrare primește un număr în loc de text.

// tsconfig.json
{
  "compilerOptions": {
    "module": "nodenext",
    "allowJs": true,
    "checkJs": true,
    "noEmit": true
  }
}

// cos.js
/** @type {{ nume: string, pret: number }[]} */
const produse = [{ nume: "pâine", pret: 5 }];

produse.push({ nume: "lapte", pret: "8" });
console.log(produse.lenght);

/** @param {string} oras */
function livrare(oras) {
  return oras.toUpperCase();
}
livrare(42);

Rezultat (tsc 5.9)

$ npx tsc
cos.js(4,31): error TS2322: Type 'string' is not assignable to type 'number'.
cos.js(5,21): error TS2551: Property 'lenght' does not exist on type '{ nume: string; pret: number; }[]'. Did you mean 'length'?
cos.js(11,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.

Exemplul 2: // @ts-check pentru un singur fișier

Fără checkJs, doar a.js (cu // @ts-check) este verificat. Aceeași greșeală din b.js nu este raportată.

// tsconfig.json: "allowJs": true, fără "checkJs"

// a.js
// @ts-check
const oras = "Iași";
console.log(oras.lenght);

// b.js
const oras = "Cluj";
console.log(oras.lenght);

Rezultat (tsc 5.9)

$ npx tsc
a.js(3,18): error TS2551: Property 'lenght' does not exist on type '"Iași"'. Did you mean 'length'?

Greșeli frecvente

  • Să pornești checkJs fără allowJs și să nu vezi nicio eroare: fișierele .js nu sunt în program.
  • Să pornești checkJs pe un proiect JavaScript mare dintr-odată. Începe cu // @ts-check fișier cu fișier.

Comenzi înrudite

  • allowJs: Permite fișiere .js în proiectul TypeScript: pot fi importate din .ts, sunt copiate în outDir și au tipuri deduse.
  • 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).
  • strict: Pornește dintr-o singură mișcare toate verificările stricte de tipuri (strictNullChecks, noImplicitAny și celelalte).