JavaRush /Курсы /Модуль 2: Fullstack /Введение в Node.js и TypeScript

Введение в Node.js и TypeScript

Модуль 2: Fullstack
8 уровень , 0 лекция
Открыта

1.1 Знакомство с Node.js

Node.js — это среда выполнения JavaScript, которая позволяет использовать JavaScript вне браузера, на сервере. TypeScript — это язык-надмножество JavaScript, которое компилируется в чистый JavaScript. Использование TypeScript с Node.js позволяет разработчикам писать более надежный и поддерживаемый код благодаря статической типизации и остальным возможностям языка.

Почему стоит использовать TypeScript с Node.js?

  1. Статическая типизация: позволяет обнаруживать ошибки на этапе компиляции.
  2. Современные возможности JavaScript: поддержка последних стандартов ECMAScript.
  3. Улучшенное автодополнение и рефакторинг: инструменты разработки, такие как Visual Studio Code, предоставляют более точное автодополнение и мощные возможности рефакторинга.
  4. Поддержка крупных проектов: четкая типизация и модули помогают в организации и поддержке больших кодовых баз.
Важно!
TypeScript ценен не как вещь в себе, а как инструмент, который очень сильно упрощает работу над сложными проектами и технологиями. Весь его потенциал раскрывается именно в сочетании с другими фреймворками и библиотеками. Из этого уровня вы узнаете о таких библиотеках, но совсем немного. По-настоящему вы сможете познакомиться с ними в модулях 3–5.

1.2 Настройка проекта Node.js с TypeScript

Установка Node.js и npm

Для начала убедитесь, что у вас установлены Node.js и npm. Вы можете скачать их с официального сайта Node.js.

Создание нового проекта

Создайте новую папку для вашего проекта и инициализируйте npm:

Terminal
    
      mkdir my-node-ts-app
    
  
    
      cd my-node-ts-app
    
  
    
      npm init -y
    
  

Установка TypeScript и необходимых зависимостей

Установите TypeScript и необходимые типы для Node.js:

Terminal
    
      npm install typescript ts-node @types/node --save-dev
    
  

Где:

  • typescript: компилятор TypeScript
  • ts-node: транслятор TypeScript, который позволяет выполнять TypeScript код без предварительной компиляции
  • @types/node: декларации типов для Node.js, необходимые для корректной работы TypeScript

1.3 Создание конфигурационного файла tsconfig.json

Создайте файл tsconfig.json в корне проекта. Этот файл будет содержать настройки компилятора TypeScript.

Пример tsconfig.json:

JSON
    
      {
        "compilerOptions": {
          "target": "ES6",
          "module": "commonjs",
          "outDir": "./dist",
          "rootDir": "./src",
          "strict": true,
          "esModuleInterop": true,
          "skipLibCheck": true
        },
        "include": ["src"],
        "exclude": ["node_modules"]
      }
    
  

Где:

  • target: определяет версию ECMAScript, в которую будет компилироваться TypeScript
  • module: указывает модульную систему для компиляции (CommonJS используется в Node.js)
  • outDir: папка, куда будут компилироваться файлы
  • rootDir: корневая папка исходного кода
  • strict: включает все строгие проверки TypeScript
  • esModuleInterop: обеспечивает совместимость с модулями ES
  • skipLibCheck: пропускает проверку типов библиотек

Создание структуры проекта

Создайте папку src для вашего исходного кода:

Terminal
    
      mkdir src
    
  

1.4 Создание базового примера

Создайте файл src/index.ts с простым примером.

Пример src/index.ts:

TypeScript
    
      // Импортируем модуль http, необходимый для создания сервера
      import http from 'http';

      // Объявляем переменную для IP-адреса сервера
      const hostname: string = '127.0.0.1';

      // Объявляем переменную для порта, на котором сервер будет ожидать запросы
      const port: number = 3000;

      // Создаем сервер, который обрабатывает входящие запросы и отправляет ответы
      const server: http.Server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse) => {
        res.statusCode = 200; // Устанавливаем статус ответа 200 (успешно)
        res.setHeader('Content-Type', 'text/plain'); // Устанавливаем заголовок ответа (тип содержимого — текст)
        res.end('Hello, TypeScript with Node.js!\n'); // Отправляем ответ с текстом
      });

      // Запускаем сервер и начинаем прослушивание запросов на указанном IP-адресе и порту
      server.listen(port, hostname, () => {
        // Когда сервер запущен, выводим сообщение в консоль
        console.log(`Server running at http://${hostname}:${port}/`);
      });
    
  

Этот код создает простой HTTP сервер, который отвечает на все запросы строкой "Hello, TypeScript with Node.js!".

Добавление скриптов для сборки и запуска

Добавьте скрипты в файл package.json для удобного запуска и компиляции проекта.

Пример package.json:

JSON
    
      {
        "name": "my-node-ts-app",
        "version": "1.0.0",
        "main": "dist/index.js",
        "scripts": {
          "start": "ts-node src/index.ts",
          "build": "tsc"
        },
        "devDependencies": {
          "@types/node": "^14.14.31",
          "ts-node": "^9.1.1",
          "typescript": "^4.1.3"
        }
      }
    
  

Где:

  • start: запускает проект с использованием ts-node
  • build: компилирует проект в JavaScript с помощью tsc

Запуск проекта

Запустите проект с использованием команды npm start.

Terminal
    
      npm start
    
  

Вы увидите сообщение о том, что сервер запущен, и сможете открыть браузер и перейти по адресу http://127.0.0.1:3000, чтобы увидеть ответ сервера.

1.5 Базовые примеры работы с TypeScript в Node.js

Работа с модулями

TypeScript поддерживает модульную систему CommonJS, используемую в Node.js. Вы можете создавать модули и импортировать их в другие файлы.

Примеры создания и использования модуля

src/logger.ts:

TypeScript
    
      export function log(message: string): void {
        console.log(`[LOG]: ${message}`);
      }
    
  

src/index.ts:

TypeScript
    
      import { log } from './logger';
      log('This is a log message from the logger module');
    
  

Использование интерфейсов и классов

TypeScript позволяет определять интерфейсы и классы для создания более структурированного и типизированного кода.

Примеры использования интерфейсов и классов

src/user.ts:

TypeScript
    
      export interface User {
        id: number;
        name: string;
      }

      export class UserService {
        private users: User[] = [];

        addUser(user: User): void {
          this.users.push(user);
        }

        getUsers(): User[] {
          return this.users;
        }
      }
    
  

src/index.ts:

TypeScript
    
      import { User, UserService } from './user';

      const userService = new UserService();

      const user: User = {
        id: 1,
        name: 'John Doe'
      };

      userService.addUser(user);
      console.log(userService.getUsers());
    
  

1.6 Асинхронное программирование

Node.js широко использует асинхронное программирование с помощью колбеков, промисов и async/await. TypeScript поддерживает все эти методы.

Примеры использования async/await

src/fetchData.ts:

TypeScript
    
      import fetch from 'node-fetch';

      export async function fetchData(url: string): Promise<any> {
        const response = await fetch(url);
        const data = await response.json();
        return data;
      }
    
  

src/index.ts:

TypeScript
    
      import { fetchData } from './fetchData';

      const url = 'https://api.github.com/users/octocat';

      fetchData(url)
        .then(data => {
          console.log(data);
        })
        .catch(error => {
          console.error('Error fetching data:', error);
        });
    
  
3
Задача
Модуль 2: Fullstack, 8 уровень, 0 лекция
Недоступна
Создание HTTP сервера
Создание HTTP сервера
3
Задача
Модуль 2: Fullstack, 8 уровень, 0 лекция
Недоступна
Логирование сообщений
Логирование сообщений
3
Задача
Модуль 2: Fullstack, 8 уровень, 0 лекция
Недоступна
Асинхронный запрос данных
Асинхронный запрос данных
3
Задача
Модуль 2: Fullstack, 8 уровень, 0 лекция
Недоступна
Управление пользователями
Управление пользователями
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ