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
checkJsfărăallowJsși să nu vezi nicio eroare: fișierele.jsnu sunt în program. - Să pornești
checkJspe un proiect JavaScript mare dintr-odată. Începe cu// @ts-checkfiș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).