Stawiamy środowisko od zera: Node.js, kompilator TypeScriptu i VS Code. Na koniec masz działający projekt, w którym zapis pliku od razu przelicza kod — i możesz w nim pracować przez cały kurs.
Czego się dziś nauczysz
- Zainstalujesz Node.js i sprawdzisz, czy działa
- Założysz projekt TypeScript z własnym plikiem konfiguracyjnym
- Skompilujesz i uruchomisz pierwszy program
- Włączysz tryb, w którym kod przelicza się sam po każdym zapisie
- Rozpoznasz trzy najczęstsze komunikaty o błędach przy starcie
Node.js — silnik, na którym to wszystko stoi
Node.js pozwala uruchamiać JavaScript poza przeglądarką, prosto z terminala. Kompilator TypeScriptu sam jest programem napisanym w JavaScripcie, więc bez Node.js się nie obejdzie.
Pobierz wersję LTS ze strony nodejs.org i zainstaluj ją, zostawiając ustawienia domyślne. Potem otwórz terminal (w Windows: Terminal lub Wiersz polecenia) i sprawdź, czy wszystko się udało:
node -v
npm -v
v22.11.0
10.9.0
Numery u ciebie będą inne i to normalne — ważne, żeby pojawiły się dwa numery wersji,
a nie komunikat o nierozpoznanym poleceniu. Razem z Node.js instaluje się npm,
czyli menedżer pakietów: to nim za chwilę pobierzemy kompilator.
„node nie jest rozpoznawane jako polecenie”
Terminal wczytuje listę dostępnych programów przy starcie, więc po instalacji trzeba go zamknąć i otworzyć na nowo. Jeśli to nie pomoże — zainstaluj Node.js ponownie i upewnij się, że opcja dopisania do zmiennej PATH jest zaznaczona.
Zakładamy projekt
Utwórz gdzieś na dysku folder kurs-ts i otwórz go w VS Code
(Plik → Otwórz folder). Następnie otwórz wbudowany terminal skrótem
Ctrl + ` i wykonaj po kolei trzy polecenia:
npm init -y
npm install --save-dev typescript
npx tsc --version
| Polecenie | Co robi |
|---|---|
npm init -y |
Tworzy plik package.json — metrykę projektu z listą używanych narzędzi.
Przełącznik -y oznacza „zgadzam się na wszystkie odpowiedzi domyślne”. |
npm install --save-dev typescript |
Pobiera kompilator do folderu node_modules. --save-dev mówi:
to narzędzie potrzebne przy pisaniu kodu, nie przy jego uruchamianiu u użytkownika. |
npx tsc --version |
Uruchamia kompilator zainstalowany w tym projekcie i pokazuje jego wersję.
npx to skrót od „uruchom program z node_modules”. |
Dlaczego nie instalujemy TypeScriptu globalnie?
Instalacja w projekcie oznacza, że każdy projekt może mieć własną wersję kompilatora —
i że kolega, który skopiuje twój folder, dostanie dokładnie to samo środowisko po jednym poleceniu
npm install. Wersja globalna prędzej czy później zacznie się gryźć z jakimś projektem.
tsconfig.json — instrukcja dla kompilatora
Kompilator musi wiedzieć, gdzie szukać kodu, dokąd zapisywać wynik i jak surowo sprawdzać typy.
Wszystko to opisuje plik tsconfig.json. Wygeneruj go poleceniem:
npx tsc --init
Powstanie plik z kilkudziesięcioma opcjami — prawie wszystkie są wyłączone komentarzem. Nie musisz ich teraz czytać. Zamiast tego zaznacz całą zawartość i zastąp ją tym zestawem, który będzie nam służył przez cały kurs:
{
"compilerOptions": {
"target": "ES2022",
"module": "commonjs",
"rootDir": "./src",
"outDir": "./dist",
"strict": true,
"noUnusedLocals": true,
"sourceMap": true
},
"include": ["src/**/*"]
}
| Opcja | Znaczenie |
|---|---|
target | Jak nowoczesny JavaScript ma powstać. ES2022 rozumie każda dzisiejsza przeglądarka i każdy Node.js. |
module | Sposób łączenia plików między sobą. commonjs to wariant, który Node.js uruchomi bez dodatkowej konfiguracji. |
rootDir | Folder z twoim kodem źródłowym — u nas src. |
outDir | Folder na gotowy JavaScript — u nas dist. Dzięki temu pliki się nie mieszają. |
strict | Najważniejsza opcja całego pliku. Włącza pełną, surową kontrolę typów. Zawsze zostawiaj włączoną. |
noUnusedLocals | Ostrzega o zmiennych, które zadeklarowałeś i nigdy nie użyłeś. Świetnie wyłapuje literówki. |
sourceMap | Tworzy mapę łączącą wynikowy JS z twoim kodem TS — dzięki niej debuger pokazuje linie z pliku .ts. |
Nie wyłączaj strict
Kiedy kompilator zaczyna marudzić, kusi, żeby ustawić "strict": false i mieć spokój.
To odbieranie sobie jedynego powodu, dla którego używa się TypeScriptu. Wyłączony tryb strict
przepuszcza między innymi wartości null tam, gdzie spodziewasz się liczby —
i wracasz do błędów z lekcji 1.
Pierwszy program
Utwórz folder src, a w nim plik index.ts. Struktura projektu wygląda tak:
kurs-ts/
├─ node_modules/ ← pobrane narzędzia (nie ruszamy)
├─ src/
│ └─ index.ts ← tu piszesz
├─ dist/ ← tu kompilator zapisze .js (powstanie sam)
├─ package.json
└─ tsconfig.json
Nie zaczynamy od zwykłego „Hello world” — napiszmy coś, co od razu pokazuje sens typów. Program przelicza punkty z egzaminu zawodowego na wynik procentowy i informację o zdaniu:
// Wynik egzaminu zawodowego — część pisemna
const maksPunktow: number = 40;
const zdobytePunkty: number = 31;
const progZdawalnosci: number = 50; // w procentach
const procent: number = (zdobytePunkty / maksPunktow) * 100;
const zdany: boolean = procent >= progZdawalnosci;
console.log("Punkty: " + zdobytePunkty + " / " + maksPunktow);
console.log("Wynik: " + procent.toFixed(1) + "%");
console.log("Status: " + (zdany ? "ZDANY" : "NIEZDANY"));
Skompiluj projekt i uruchom wynik:
npx tsc
node dist/index.js
Punkty: 31 / 40
Wynik: 77.5%
Status: ZDANY
Co się właśnie stało
npx tscprzeczytałtsconfig.json, sprawdził typy w folderzesrci zapisał gotowy JavaScript w folderzedist.node dist/index.jsuruchomił wynik kompilacji, a nie twój plik źródłowy. Node.js nie umie uruchomić pliku.ts.- Zajrzyj do
dist/index.js— zobaczysz ten sam kod, ale bez dwukropków i typów. To dowód z lekcji 1: typy znikają.
Sprawdź, że kontrola typów naprawdę działa
Dopisz na końcu pliku jedną linijkę i skompiluj ponownie:
const komentarz: string = procent;
src/index.ts:13:7 - error TS2322: Type 'number' is not assignable to type 'string'.
Kompilator podaje plik, numer linii i kolumny oraz kod błędu. Tłumaczenie: „próbujesz włożyć liczbę do pudełka opisanego jako tekst”. Usuń tę linię, zanim przejdziesz dalej.
Kody błędów TS są twoim przyjacielem
Wpisanie w wyszukiwarkę samego kodu, na przykład TS2322, prowadzi wprost do wyjaśnień
i przykładów. To dużo skuteczniejsze niż wklejanie całego komunikatu.
Tryb czuwania — koniec z ręczną kompilacją
Wpisywanie npx tsc po każdej zmianie szybko męczy. Kompilator potrafi obserwować pliki
i przeliczać je sam:
npx tsc --watch
Terminal zostaje zajęty i po każdym zapisie pliku pokazuje wynik sprawdzania. Otwórz drugi terminal
(ikona + w panelu terminala) i tam uruchamiaj node dist/index.js.
Tryb czuwania przerywasz skrótem Ctrl + C.
Własne skróty w package.json
Żeby nie pamiętać tych poleceń, dopisz do package.json sekcję scripts:
"scripts": {
"build": "tsc",
"watch": "tsc --watch",
"start": "tsc && node dist/index.js"
}
Od teraz jedno polecenie npm start kompiluje projekt i od razu go uruchamia —
będziemy go używać do końca kursu.
Kiedy coś nie działa
| Komunikat | Przyczyna i rozwiązanie |
|---|---|
Cannot find module '…/dist/index.js' |
Uruchamiasz plik, którego nie ma — kompilacja się nie powiodła albo jej nie było.
Wykonaj npx tsc i przeczytaj komunikaty. |
error TS18003: No inputs were found |
Kompilator nie znalazł żadnego pliku .ts. Sprawdź, czy plik leży w folderze
src i czy ma rozszerzenie .ts, a nie .ts.txt. |
'tsc' is not recognized… |
Piszesz tsc zamiast npx tsc. Bez npx system szuka
kompilatora zainstalowanego globalnie, a my zainstalowaliśmy go w projekcie. |
| Terminal jest w złym folderze | Wszystkie polecenia wykonuj tam, gdzie leży package.json.
Sprawdzisz to poleceniem dir (Windows) lub ls (Linux, macOS). |
| Kod działa mimo błędów | To nie pomyłka: tsc domyślnie generuje plik .js nawet wtedy, gdy znalazł
błędy typów. Nigdy nie ignoruj czerwonych komunikatów tylko dlatego, że program się uruchomił. |
Zadania
Załóż projekt kurs-ts według instrukcji z tej lekcji: package.json,
zainstalowany TypeScript, tsconfig.json z naszymi ustawieniami, folder src
z plikiem index.ts. Uruchom program i zrób zrzut ekranu terminala z wynikiem.
W pliku src/index.ts napisz program, który wypisuje twoje dane w ramce ze znaków.
Użyj co najmniej trzech zmiennych z jawnie podanym typem: tekstu, liczby i wartości logicznej.
pokaż przykładowe rozwiązanie
const imie: string = "Kacper";
const klasa: string = "3TI";
const rokNauki: number = 3;
const zdanyProbny: boolean = true;
console.log("╔══════════════════════════════╗");
console.log("║ " + imie + " — klasa " + klasa);
console.log("║ Rok nauki: " + rokNauki);
console.log("║ Próbny INF.04: " + (zdanyProbny ? "zdany" : "do poprawy"));
console.log("╚══════════════════════════════╝");
Wprowadź do swojego programu trzy różne błędy, po jednym naraz, i zapisz kod błędu z komunikatu kompilatora oraz jego tłumaczenie własnymi słowami:
- przypisz liczbę do zmiennej opisanej jako
string, - użyj zmiennej, której nigdzie nie zadeklarowałeś,
- wywołaj na liczbie metodę tekstową, na przykład
rokNauki.toUpperCase().
pokaż spodziewane kody błędów
TS2322 — typ podanej wartości nie pasuje do typu zmiennej.
TS2304 — nie znaleziono nazwy (zwykle literówka albo brak deklaracji).
TS2339 — ten typ nie ma takiej właściwości ani metody.
Te trzy kody odpowiadają za większość błędów, które zobaczysz w tym kursie. Warto je zapamiętać.
Napisz program, który ma zapisane w zmiennych cztery oceny cząstkowe i ich wagi, a następnie wypisuje: średnią ważoną z dokładnością do dwóch miejsc po przecinku, ocenę zaokrągloną do liczby całkowitej oraz informację, czy średnia przekroczyła 4,0. Wszystkim zmiennym nadaj jawne typy.
pokaż wskazówki
Średnia ważona to suma iloczynów ocena × waga podzielona przez sumę wag.
Do zaokrąglenia użyj Math.round(…), do formatowania .toFixed(2).
Wynik porównania srednia > 4 jest już wartością typu boolean —
nie musisz pisać żadnego if, wystarczy operator warunkowy ? :.
Zmień w tsconfig.json opcję "target" z "ES2022" na
"ES5", skompiluj projekt ponownie i porównaj plik dist/index.js
z poprzednią wersją. Co się zmieniło i dlaczego? Po zakończeniu przywróć ES2022.
pokaż wyjaśnienie
Przy ES5 kompilator tłumaczy kod na wersję języka z 2009 roku: wszystkie
const i let zamieniają się w var. Przy nowszych
konstrukcjach dopisałby też sporo dodatkowego kodu zastępczego.
To dobrze pokazuje, czym jest target: nie zmienia tego, co program robi,
tylko to, jak stary silnik JavaScriptu wystarczy, żeby go uruchomić.
Ściąga z tej lekcji
| Polecenie | Działanie |
|---|---|
npm init -y | zakłada plik package.json |
npm install --save-dev typescript | instaluje kompilator w projekcie |
npx tsc --init | tworzy tsconfig.json |
npx tsc | kompiluje src/*.ts do dist/*.js |
npx tsc --watch | kompiluje automatycznie po każdym zapisie |
node dist/index.js | uruchamia gotowy program |
npm start | kompiluje i uruchamia jednym poleceniem |
Zachowaj ten projekt
Wszystkie kolejne lekcje piszemy w tym samym folderze — wystarczy podmieniać zawartość
src/index.ts. Środowisko stawiasz tylko raz.