TypeScript doskonale nadaje się do pisania aplikacji backendowych w Node.js. Wprowadza większą stabilność i bezpieczeństwo kodu, oferując m.in. silne typowanie i lepsze wsparcie dla nowoczesnych funkcji ECMAScript.
W tym wpisie omówimy, jak skonfigurować i używać TypeScript w środowisku Node.js, oraz jakie korzyści płyną z jego stosowania.
1. Instalacja i konfiguracja TypeScript w projekcie Node.js
Aby zacząć korzystać z TypeScript w Node.js, najpierw musimy zainstalować odpowiednie zależności oraz skonfigurować środowisko.
1.1 Tworzenie projektu Node.js z TypeScript
1. Inicjalizacja projektu Node.js:
Zainicjuj nowy projekt Node.js za pomocą npm:
mkdir my-node-app
cd my-node-app
npm init -y
2. Instalacja TypeScript i innych niezbędnych narzędzi:
Zainstaluj TypeScript i typy dla Node.js:
npm install typescript @types/node --save-dev
3. Inicjalizacja konfiguracji TypeScript:
Następnie, uruchom komendę, która stworzy plik konfiguracyjny tsconfig.json:
npx tsc --init
4. Konfiguracja pliku tsconfig.json:
Typowa konfiguracja dla projektu Node.js może wyglądać tak:
Stwórz katalog src, gdzie będą przechowywane pliki TypeScript:
mkdir src
2. Pierwszy program w Node.js z TypeScript
Teraz możemy napisać prostą aplikację backendową, która uruchomi serwer HTTP. Poniżej znajdziesz przykład serwera HTTP stworzonego z użyciem TypeScript.
2.1 Przykład serwera HTTP
Stwórz plik src/server.ts:
import http from 'http';
// Funkcja obsługująca żądania
const requestListener = (req: http.IncomingMessage, res: http.ServerResponse) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, TypeScript with Node.js!\n');
};
// Tworzenie serwera HTTP
const server = http.createServer(requestListener);
// Nasłuchiwanie na porcie 3000
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
2.2 Kompilacja i uruchomienie
Aby uruchomić projekt, najpierw skompiluj pliki TypeScript, a następnie uruchom Node.js
1. Kompilacja kodu TypeScript:
npx tsc
Pliki TypeScript zostaną skompilowane do katalogu dist.
2. Uruchomienie serwera:
node dist/server.js
Serwer uruchomi się na porcie 3000, a po otwarciu w przeglądarce adresu http://localhost:3000 zobaczysz wiadomość "Hello, TypeScript with Node.js!".
3. Typowanie w Node.js
Jedną z największych zalet korzystania z TypeScript w Node.js jest możliwość typowania kodu. W Node.js często operujemy na danych pochodzących z żądań HTTP, plików, baz danych itp. Dzięki TypeScriptowi możemy zdefiniować, jakie typy danych są oczekiwane, co pomaga unikać błędów.
3.1 Przykład typowania funkcji
Załóżmy, że mamy funkcję, która przetwarza dane z żądania HTTP:
import { IncomingMessage } from 'http';
const parseRequest = (req: IncomingMessage): string => {
if (req.method === 'GET') {
return 'Processing GET request';
} else {
return 'Processing other request';
}
};
W powyższym przykładzie korzystamy z typowania IncomingMessage dostarczanego przez bibliotekę Node.js. TypeScript automatycznie sprawdzi, czy dane przekazane do tej funkcji są zgodne z oczekiwanym typem.
4. Praca z modułami w Node.js
TypeScript w Node.js obsługuje zarówno moduły CommonJS, jak i ES6. Moduły CommonJS są standardem w Node.js, ale możemy korzystać z nowoczesnych modułów ECMAScript dzięki TypeScript.
4.1 Eksportowanie i importowanie modułów
W TypeScript możemy używać zarówno eksportów typu CommonJS, jak i ES6. Oto przykład:
// plik src/server.ts
import { greet } from './util';
console.log(greet('TypeScript'));
5. Typowanie asynchronicznych operacji
W aplikacjach Node.js bardzo często korzystamy z operacji asynchronicznych, takich jak odczyt plików czy zapytania do bazy danych. TypeScript oferuje wsparcie dla typowania funkcji zwracających Promise.
5.1 Przykład asynchronicznej funkcji
Załóżmy, że mamy funkcję, która odczytuje dane z pliku:
W tym przykładzie funkcja readFileContent zwraca Promise<string>, co oznacza, że jej wynik będzie tekstem po zakończeniu asynchronicznej operacji.
6. Obsługa błędów
W aplikacjach Node.js obsługa błędów jest kluczowa. W TypeScript możemy typować błędy, co ułatwia zarządzanie wyjątkami.
6.1 Typowanie wyjątków
Przykład funkcji, która obsługuje błędy w sposób typowany:
const handleRequest = (data: any): void => {
try {
if (!data) {
throw new Error('Brak danych');
}
console.log('Dane są poprawne');
} catch (error) {
if (error instanceof Error) {
console.error(`Błąd: ${error.message}`);
}
}
};
W tym przykładzie error jest sprawdzany, czy jest instancją obiektu Error, co zapewnia, że typowanie będzie zgodne z oczekiwaniami.
7. Narzędzia wspierające TypeScript w Node.js
Podczas pracy z TypeScript w Node.js warto korzystać z narzędzi wspierających procesy automatyzacji:
Nodemon: Monitoruje pliki i automatycznie restartuje serwer po wprowadzeniu zmian.
ts-node: Uruchamia kod TypeScript bez potrzeby jego wcześniejszej kompilacji.
npm install ts-node --save-dev
Podsumowanie
TypeScript w Node.js to potężne narzędzie, które znacząco zwiększa stabilność i czytelność kodu backendowego. Dzięki silnemu typowaniu, narzędziom wspierającym, takim jak ts-node czy nodemon, oraz możliwości wykorzystania nowoczesnych funkcji ECMAScript, TypeScript staje się naturalnym wyborem dla programistów tworzących aplikacje serwerowe w Node.js.