Ce face lib
TypeScript nu știe singur ce funcții există la rulare. Le află din fișierele de declarații incluse cu el: lib.es2022.d.ts descrie Array.prototype.at, lib.dom.d.ts descrie document, window, fetch și console. Fără lib scris, lista vine din target plus dom (de exemplu target: es2022 înseamnă es2022 și dom).
Când scrii lib, înlocuiești complet lista. Pentru un program Node.js fără browser poți scrie ["es2022"], dar atunci console vine doar din @types/node (vezi exemplul). Valori: versiunile es5…es2024, esnext, dom, dom.iterable, dom.asynciterable, webworker, scripthost și părți mai mici, ca es2022.array sau esnext.disposable.
noLib (implicit false) nu include niciun fișier de bibliotecă; trebuie să definești tu tipurile de bază (Array, String…). libReplacement (TypeScript 5.8, implicit true) permite înlocuirea unei biblioteci cu un pachet npm numit @typescript/lib-* (de exemplu @typescript/lib-dom). tsc caută aceste pachete la fiecare compilare; dacă nu le folosești, "libReplacement": false evită căutarea.
Parametri
| Parametru | Descriere |
|---|---|
lib: ["…"] |
Lista de biblioteci. Implicit: calculată din target, plus dom. |
noLib: true |
Nicio bibliotecă standard. |
libReplacement: false |
Nu caută pachete @typescript/lib-*. Implicit true. |
Exemple
Exemplul 1: Fără dom
Fără dom și fără @types/node, nu există nici document, nici console.
// tsconfig.json
{
"compilerOptions": {
"target": "es2022",
"lib": ["es2022"],
"noEmit": true
}
}
// index.ts
const buton = document.querySelector("button");
console.log(buton);
Rezultat (tsc 5.9)
$ npx tsc
index.ts(1,15): error TS2584: Cannot find name 'document'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.
index.ts(2,1): error TS2584: Cannot find name 'console'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.
Exemplul 2: noLib
Fără nicio bibliotecă, lipsesc chiar și tipurile de bază.
// index.ts
let x: number = 1;
console.log(x);
Rezultat (tsc 5.9)
$ npx tsc --noEmit --noLib index.ts
error TS2318: Cannot find global type 'Array'.
error TS2318: Cannot find global type 'Boolean'.
error TS2318: Cannot find global type 'Function'.
error TS2318: Cannot find global type 'IArguments'.
error TS2318: Cannot find global type 'Number'.
error TS2318: Cannot find global type 'Object'.
error TS2318: Cannot find global type 'RegExp'.
error TS2318: Cannot find global type 'String'.
Exemplul 3: O bibliotecă înlocuită de un pachet
În node_modules/@typescript/lib-es2022 există un pachet propriu care declară funcția globală afiseaza. Cu libReplacement (implicit), tsc îl folosește în locul lui lib.es2022.d.ts; cu false, folosește biblioteca standard și afiseaza nu există.
// tsconfig.json
{
"compilerOptions": {
"target": "es2022",
"lib": ["es2022"],
"noEmit": true
}
}
// index.ts
afiseaza([1, 2].length);
Rezultat (tsc 5.9)
$ npx tsc --listFilesOnly
/proiect/node_modules/@typescript/lib-es2022/index.d.ts
/proiect/index.ts
$ npx tsc
$ npx tsc --libReplacement false
index.ts(1,1): error TS2304: Cannot find name 'afiseaza'.
Greșeli frecvente
- Să scrii
"lib": ["dom"]fără o versiunees…. PierziPromise,Mapși restul; lista înlocuiește complet valoarea implicită. - Să adaugi
"lib": ["esnext"]crezând că funcțiile noi vor exista la rulare.libdescrie doar ce presupui că există; mediul trebuie să le aibă.
Comenzi înrudite
target: Versiunea de JavaScript generată: sintaxa mai nouă decât ținta este transformată în cod echivalent mai vechi.types: Alege exact ce pachete de tipuri globale (din node_modules/@types) se încarcă automat; [] nu încarcă niciunul.skipLibCheck: Nu mai verifică erorile din fișierele .d.ts (ale pachetelor și ale proiectului); compilarea devine mai rapidă.noResolve: Nu adaugă în compilare fișierele găsite prin import sau /// <reference>; intră doar fișierele date explicit.