"lib"

Wybiera wbudowane typy środowiska: wersję JavaScriptu, API przeglądarki i pojedyncze nowości języka.

Na tej stronie

Przykład

#
JSON
{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["ES2023", "DOM", "DOM.Iterable"]
  }
}

Definicja i zastosowanie

#

Opcja lib określa, które zestawy wbudowanych deklaracji typów zna kompilator: obiekty JavaScriptu (Array, Map, Promise) w danej wersji języka, API przeglądarki (document, fetch) albo wybrane nowości. Nie dodaje do programu żadnego kodu, tylko opisuje, co istnieje w środowisku.

Bez lib kompilator dobiera zestaw do opcji target i dokłada typy przeglądarki. Gdy podasz lib sam, zastępujesz ten domyślny zestaw, więc w projekcie przeglądarkowym musisz dopisać DOM i zwykle DOM.Iterable. W projekcie dla Node.js typy środowiska daje paczka @types/node, a DOM lepiej pominąć.

lib nie dodaje polyfilli. Jeśli dopiszesz ES2023, kompilator pozwoli użyć toReversed(), ale w przeglądarce bez tej metody program i tak zgłosi błąd. Dobieraj wartości do środowiska, w którym kod naprawdę działa.

Składnia

#
Składnia
"lib": ["ES2022", "DOM", "DOM.Iterable"]

Najczęstsze wartości

#
  • ES2022, ES2023, …

    Typy języka z danej wersji, np. Array.prototype.at() w ES2022 i toSorted() w ES2023. Każda wersja zawiera też wszystkie wcześniejsze.
  • ESNext

    Najnowsze funkcje, także te, które nie trafiły jeszcze do oficjalnej wersji języka, np. typy dla deklaracji using.
  • DOM

    API przeglądarki: window, document, elementy HTML, zdarzenia i fetch.
  • DOM.Iterable

    Iterowanie po kolekcjach DOM, np. pętla for...of po wyniku querySelectorAll().
  • WebWorker

    Typy środowiska Web Workera, używane zamiast DOM w plikach workerów.
  • esnext.disposable

    Przykład pojedynczego fragmentu: typy Symbol.dispose i Disposable dla using. Takie wartości dodają jedną nowość bez podnoszenia całej wersji.

Więcej przykładów

#
Typy spoza wybranych bibliotek
TypeScript
// "lib": ["ES2022"]
const scores = [72, 95, 88]
const reversed = scores.toReversed()
// Błąd: Property 'toReversed' does not exist on type 'number[]'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2023' or later.

const title = document.querySelector('h1')
// Błąd: Cannot find name 'document'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.
Brak DOM.Iterable
TypeScript
// "lib": ["ES2023", "DOM"]
const items = document.querySelectorAll('li')
for (const item of items) item.classList.add('done')
// Błąd: Type 'NodeListOf<HTMLLIElement>' must have a '[Symbol.iterator]()' method that returns an iterator.

Dobre praktyki

#
  • Jeśli nie masz konkretnego powodu, nie ustawiaj lib wcale. Domyślny zestaw dla wybranego target zawiera już typy przeglądarki.
  • Komunikat „Do you need to change your target library?” oznacza, że kod używa API spoza wybranych bibliotek. Dopisz wskazaną wartość tylko wtedy, gdy środowisko naprawdę je obsługuje.
  • Pojedyncze nowości włączysz bez podnoszenia całej wersji, np. "esnext.disposable" dla deklaracji using.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.