"lib"
Wybiera wbudowane typy środowiska: wersję JavaScriptu, API przeglądarki i pojedyncze nowości języka.
Przykład
#{
"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
#"lib": ["ES2022", "DOM", "DOM.Iterable"]Najczęstsze wartości
#ES2022, ES2023, …
Typy języka z danej wersji, np.Array.prototype.at()w ES2022 itoSorted()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 deklaracjiusing.DOM
API przeglądarki:window,document, elementy HTML, zdarzenia ifetch.DOM.Iterable
Iterowanie po kolekcjach DOM, np. pętlafor...ofpo wynikuquerySelectorAll().WebWorker
Typy środowiska Web Workera, używane zamiastDOMw plikach workerów.esnext.disposable
Przykład pojedynczego fragmentu: typySymbol.disposeiDisposabledlausing. Takie wartości dodają jedną nowość bez podnoszenia całej wersji.
Więcej przykładów
#// "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'.// "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
libwcale. Domyślny zestaw dla wybranegotargetzawiera 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 deklaracjiusing.
Powiązane hasła
#- "target"Wersja JavaScriptu, do której kompilator zamienia kod.
- "module"Format modułów w wygenerowanym kodzie i sposób rozumienia importów.
- "jsx"Określa, co kompilator robi ze składnią JSX w plikach .tsx.
- usingDeklaracja zasobu, który zostanie automatycznie zwolniony przy wyjściu z bloku, nawet po błędzie.
- "strict"Włącza zestaw najważniejszych, rygorystycznych sprawdzeń kompilatora.
Widzisz błąd albo brakuje przykładu? Napisz do nas.