TypeScript + Node.js: практическое руководство

TypeScript широко используется в серверной разработке на Node.js. В этом руководстве рассматриваются настройка и использование TypeScript для проектов Node.js.

Использование TypeScript делает код Node.js безопаснее и проще в поддержке, особенно подходит для средних и крупных backend-проектов.

Руководство Node.js: Просмотрhttps://www.example.com/nodejs/nodejs-tutorial.html


SVG-диаграмма: структура проекта Node.js + TypeScript Background Title Node.js + TypeScript Project Structure Project Configuration Project Configuration package.json tsconfig.json ts-node Source Code Source Code (src/) types/ - Type definitions services/ - Business logic routes/ - Route handling Compiled Output Compiled Output (dist/) .js - JavaScript .d.ts - Type declarations .map - Source maps Runtime Node.js Runtime Execute JS Bottom half: Development workflow Development Workflow Step 1 npm install dependencies Step 2 tsc compiles TypeScript Step 3 node runs JavaScript Step 4 API request testing Arrow marker

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

Проекты на Node.js часто включают сложную бизнес-логику и обработку данных, а кодовая база может быстро расти.

Использование TypeScript позволяет: обеспечивать проверку типов во время компиляции, чтобы уменьшить ошибки времени выполнения; использовать интеллектуальные подсказки IDE для повышения эффективности разработки; делать код более простым для чтения и поддержки.

Многие крупные проекты на Node.js (например, NestJS) рекомендуют TypeScript или используют его по умолчанию.

Преимущества:Статическая проверка типов TypeScript может выявлять потенциальные проблемы во время разработки, что эффективнее, чем отладка во время выполнения.


Инициализация проекта

Сначала инициализируйте проект Node.js и установите зависимости, связанные с TypeScript.

Инициализация проекта

# Инициализация npm
npm init -y

# Установка TypeScript и Node.jsОпределения типов
# -D означает установку как dev-зависимости
npm install -D typescript @types/node ts-node nodemon

# Инициализация tsconfig.json
npx tsc --init

Примечания:@types/nodeПредоставляет определения типов для API Node.js,ts-nodeМожет запускать файлы TypeScript напрямую,nodemonОтслеживает изменения файлов и автоматически выполняет перезапуск.


Конфигурация tsconfig.json

Настройте параметры компилятора TypeScript, оптимизированные для проектов Node.js.

tsconfig.json

{
    "compilerOptions": {
        // Цель компиляции: ES2020
        "target": "ES2020",

        ⟦0∥// Система модулей: CommonJS (нативно поддерживается Node.js)
        "module": "commonjs",

        // Включенные библиотеки
        "lib": ["ES2020"],

        // Каталог вывода
        "outDir": "./dist",

        // Корневой каталог исходного кода
        "rootDir": "./src",

        // Строгий режим (всегда включён)
        "strict": true,

        // Совместимость с ES-модулями
        "esModuleInterop": true,

        // Пропустить проверки библиотек
        "skipLibCheck": true,

        // Обеспечить единообразный регистр в именах файлов
        "forceConsistentCasingInFileNames": true,

        // Стратегия разрешения модулей
        "moduleResolution": "node",

        // Генерировать файлы объявлений
        "declaration": true
    },
    // Файлы для компиляции
    "include": ["src/**/*"],
    // Исключаемые файлы
    "exclude": ["node_modules", "dist"]
}

Рекомендуемая конфигурация:Для проектов на Node.js рекомендуется использоватьmodule: "commonjs", которая является системой модулей, нативно поддерживаемой Node.js.


Определение типов

Определите интерфейсы типов проекта в каталоге types.

src/types/index.ts

// Определение типа пользователя
export interface User {
    id: number;         // ID пользователя
    name: string;       // Имя пользователя
    email: string;      // Электронная почта
    createdAt: Date;   // Время создания
}

// Объект передачи данных для создания пользователя
export interface CreateUserDTO {
    name: string;       // Имя пользователя (обязательно)
    email: string;     // Электронная почта (обязательно)
    password: string;   // Пароль (обязательно)
}

// Тип ответа API (обобщённый)
export interface ApiResponse<T> {
    success: boolean;   // Признак успеха
    data?: T;         // Данные при успехе
    error?: string;   // Сообщение об ошибке при сбое
}

Определения типов:Централизуйте определения типов в каталоге types для упрощения сопровождения и повторного использования.


Реализация сервисов

Реализуйте бизнес-логику в каталоге services, используя определённые типы.

src/services/userService.ts

// Импорт определений типов
import { User, CreateUserDTO, ApiResponse } from "../types";

// Класс сервиса пользователей
class UserService {
    // Список пользователей (хранилище в памяти)
    private users: User[] = [];
    // Следующий ID пользователя
    private nextId = 1;

    // Создать пользователя
    createUser(dto: CreateUserDTO): ApiResponse<User> {
        try {
            // Создать объект пользователя
            const user: User = {
                id: this.nextId++,
                name: dto.name,
                email: dto.email,
                createdAt: new Date()
            };
            this.users.push(user);
            return { success: true, data: user };
        } catch (error) {
            return { success: false, error: "Не удалось создать пользователя" };
        }
    }

    // Получить одного пользователя
    getUser(id: number): ApiResponse<User> {
        const user = this.users.find(u => u.id === id);
        if (!user) {
            return { success: false, error: "Пользователь не найден" };
        }
        return { success: true, data: user };
    }

    // Получить всех пользователей
    getAllUsers(): ApiResponse<User[]> {
        return { success: true, data: this.users };
    }
}

// Экспорт синглтона
export default new UserService();

Результат выполнения:

UserService 实例化成功

Слой сервисов:Бизнес-логика централизована в слое сервисов для упрощения тестирования и повторного использования.


Создание маршрутов API

Создайте RESTful API с использованием фреймворка Express.

src/index.ts

import express, { Request, Response } from "express";
import userService from "./services/userService";

// Создать приложение Express
const app = express();
// Разобрать тела JSON-запросов
app.use(express.json());

// Получить всех пользователей
app.get("/api/users", (req: Request, res: Response) => {
    const result = userService.getAllUsers();
    res.json(result);
});

// Получить одного пользователя
app.get("/api/users/:id", (req: Request, res: Response) => {
    const id = parseInt(req.params.id);
    const result = userService.getUser(id);
    res.json(result);
});

// Создать пользователя
app.post("/api/users", (req: Request, res: Response) => {
    const result = userService.createUser(req.body);
    res.json(result);
});

const PORT = 3000;
app.listen(PORT, () => {
    console.log(`Сервер запущен по адресу http://localhost:${PORT}`);
});

Результат выполнения:

服务器运行在 http://localhost:3000

Подсказки типов:ИспользуяRequestиResponseтип, IDE предоставит полные подсказки свойств.


Скрипты package.json

Настройте npm-скрипты, чтобы упростить процесс разработки.

package.json

{
    "scripts": {
        // Компиляция TypeScript
        "build": "tsc",

        // Запуск скомпилированного JavaScript
        "start": "node dist/index.js",

        // Режим разработки: используйте nodemon для отслеживания изменений и автоматического перезапуска
        "dev": "nodemon --exec ts-node src/index.ts",

        // Запуск тестов
        "test": "jest"
    }
}

Эффективность разработки:Использованиеnpm run devпозволяет автоматически перезапускать сервер после изменений кода.


Примечания

  • Строгий режим:Всегда включайте strict: true
  • Выбор модуля:Проекты Node.js должны использовать commonjs
  • Определения типов:Установите @types/node, чтобы получить типы API
  • Инструменты разработки:Используйте ts-node для горячей перезагрузки

Лучшие практики:Храните определения типов отдельно от бизнес-логики для упрощения тестирования и сопровождения.


Итог

TypeScript — отличный выбор для серверной разработки на Node.js.

  • Конфигурация проекта:Используйте tsconfig.json для настройки параметров компиляции
  • Определения типов:Централизованно управляйте интерфейсами в каталоге types
  • Слой сервисов:Отделите бизнес-логику от маршрутов
  • Маршруты:Используйте Express для создания RESTful API
  • Инструменты разработки:ts-node и nodemon повышают эффективность разработки

Рекомендация:Используйте TypeScript напрямую для новых проектов; существующие проекты можно мигрировать постепенно.

Другие расширения