Экосистема инструментов для разработки на TypeScript
Одним из главных преимуществ экосистемы TypeScript являются мощные инструменты, обеспечивающие качественное сопровождение каждого этапа разработки:
Качество кода
- ESLint с поддержкой TypeScript
- Проверка типов и линтеры
- Принуждение соблюдения стиля кода
Разработка
- Интеграция с VS Code
- Инструменты отладки
- Горячая замена модулей (HMR)
Сборка и развертывание
- Менеджеры пакетов (Vite, Webpack, Parcel)
- Пакетирование модулей
- Оптимизация производительности в рабочей среде
Линтеры с помощью ESLint
Установка
Установите ESLint и официальную поддержку синтаксиса и правил TypeScript, чтобы ESLint мог понимать синтаксис TypeScript.
Пример
# Установка ESLint с поддержкой TypeScript
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
Конфигурация
Эта конфигурация активирует рекомендованные правила ESLint для TypeScript, подключает ESLint к вашему файлу tsconfig для проверок типов и настраивает несколько распространённых правил.
Пример
// .eslintrc.json
{
"root": true,
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking"
],
"parserOptions": {
"project": "./tsconfig.json",
"ecmaVersion": 2020,
"sourceType": "module"
},
"rules": {
"@typescript-eslint/explicit-function-return-type": "warn",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }]
}
}
Скрипты NPM
Добавьте скрипты для запуска процесса анализа и проверки только типов.
Используйте команду lint:fix для автоматического исправления простых проблем.
Пример
// package.json
{
"scripts": {
"lint": "eslint . --ext .ts,.tsx",
"lint:fix": "eslint . --ext .ts,.tsx --fix",
"type-check": "tsc --noEmit"
}
}
Форматирование кода с помощью Prettier
Prettier помогает поддерживать единый стиль оформления кода среди вашей команды.
Комбинируйте его с ESLint, чтобы избегать ошибок, вызванных форматированием.
Установка
Установите Prettier плюс плагины ESLint, отключающие конфликтующие правила и отображающие проблемы форматирования через ESLint.
Пример
# Установка Prettier и сопутствующих пакетов
npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier
Конфигурация
Определите предпочтения Prettier в файле .prettierrc и игнорируйте сгенерированные каталоги в .prettierignore.
Пример
// .prettierrc
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"printWidth": 100,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "avoid"
}
// .prettierignore
node_modules
build
dist
.next
.vscode
Интеграция с ESLint
Расширьте правило plugin:prettier/recommended, чтобы проблемы форматирования выводились как предупреждения ESLint.
Пример
// .eslintrc.json
{
"extends": [
// Другие конфиги...
"plugin:prettier/recommended" // Должно быть последним элементом массива
]
}
Пример интеграции Prettier с ESLint
npm install --save-dev eslint-config-prettier eslint-plugin-prettier
# В вашем файле .eslintrc.js или .eslintrc.json добавьте:
{
"extends": ["plugin:prettier/recommended"]
}
Современные инструменты сборки
Рекомендуемый выбор — Vite для быстрого сервера разработки и современных сборок.
Webpack остаётся популярным и высококонфигурируемым инструментом.
Vite (рекомендуется)
Создайте новый проект React + TypeScript с помощью Vite.
Это запускает сервер разработки с функцией HMR для быстрой обратной связи.
Пример
# Создание нового проекта с React + TypeScript
npm create vite@latest my-app -- --template react-ts
# Переход в директорию проекта
cd my-app
# Установка зависимостей
npm install
# Запуск сервера разработки
npm run dev
Конфигурация Webpack
Если вы выбрали Webpack, следующая минимальная настройка транспилирует TypeScript, обрабатывает CSS и обслуживает вашу программу с помощью веб-пака webpack-dev-server.
Пример
// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.tsx',
module: {
rules: [
{
test: /\.(ts|tsx)$/,
use: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js'],
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
}),
],
devServer: {
static: path.join(__dirname, 'dist'),
compress: true,
port: 3000,
hot: true,
},
};
Конфигурация TypeScript
Конфигурация файла tsconfig.json, нацеленная на современные браузеры.
Дополнительные параметры baseUrl и paths помогают организовать абсолютные пути импорта вроде @/components/Button.
Пример
// tsconfig.json
{
"compilerOptions": {
"target": "es2020",
"module": "esnext",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src"],
"exclude": ["node_modules"]
}
Настройка среды разработки
Настройте редактор для вывода ошибок анализа кода, автоматического форматирования при сохранении и эффективной отладки.
Расширения для VS Code
Рекомендуемые расширения для VS Code:
- TypeScript + Webpack Problem Matchers — для улучшения информирования об ошибках
- ESLint — интеграция ESLint в VS Code
- Prettier — формировщик кода для единообразного формата
- Path IntelliSense — автозаполнение файлов
- Error Lens — показ ошибок прямо в тексте
Настройки VS Code
Используйте Prettier как основной форматтер, исправляйте ошибки ESLint при сохранении и предпочтительно пользуйтесь относительными путями импорта.
Пример
// .vscode/settings.json
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.organizeImports": true
},
"eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.preferences.importModuleSpecifier": "non-relative"
}
Настройка отладки
Запускайте ваш локальный сервер разработки в Chrome и выполняйте тестирование и отладку на основе Node прямо из VS Code.
Пример
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}",
"sourceMaps": true,
"sourceMapPathOverrides": {
"webpack:///./~/*": "${workspaceFolder}/node_modules/*",
"webpack:///./*": "${workspaceFolder}/src/*"
}
},
{
"type": "node",
"request": "launch",
"name": "Debug Tests",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/jest",
"args": ["--runInBand", "--watchAll=false"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"sourceMaps": true
}
]
}
Настройка тестирования
Популярный вариант для тестирования приложений React + TypeScript — Jest с Testing Library.
Jest + Testing Library
Установите Jest, поддержку TypeScript и утилиты React Testing Library для изменения DOM и взаимодействия с пользователями.
Пример
# Установка тестовых зависимостей
npm install --save-dev jest @types/jest ts-jest @testing-library/react @testing-library/jest-dom @testing-library/user-event
Конфигурация Jest
Настройте Jest для использования ts-jest, создания карт модулей CSS и разрешения проблем с псевдонимами путей вроде @/.
Пример
// jest.config.js
module.exports = {
preset: 'ts-jest',
testEnvironment: 'jsdom',
setupFilesAfterEnv: ['@testing-library/jest-dom'],
moduleNameMapper: {
'^@/(.*)$': '/src/$1',
'\\\.(css|less|scss|sass)$': 'identity-obj-proxy',
},
transform: {
'^.+\\\.tsx?$': 'ts-jest',
},
testMatch: ['**/__tests__/**/*.test.(ts|tsx)'],
};
Пример теста
Простой тест компонента, проверяющий рендеринг и поведение нажатия с помощью Testing Library.
Пример
// src/__tests__/Button.test.tsx
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import Button from '../components/Button';
describe('Button', () => {
it('отображает кнопку с правильным текстом', () => {
render(<Button>Нажмите меня</Button>);
expect(screen.getByRole('button', { name: /нажмите меня/i })).toBeInTheDocument();
});
it('вызывает onClick при клике', () => {
const handleClick = jest.fn();
render(<Button onClick={handleClick}>Нажмите меня</Button>);
fireEvent.click(screen.getByRole('button'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
});
Лучшие практики
Рабочий процесс разработки
- Используйте
npm run devдля разработки с горячей перезагрузкой - Выполняйте
npm run type-checkдля проверки типов TypeScript - Запускайте
npm run lintдля проверки наличия ошибок линта - Выполняйте
npm run buildдля создания сборки для рабочей среды
Оптимизация производительности
- Используйте разделение кода с динамическими импортами
- Активируйте механизм устранения мертвого кода (tree-shaking) в рабочих сборках
- Используйте
React.memoиuseMemoдля оптимизации вычислений - Используйте ленивую загрузку некритичных компонентов
Общие ловушки
- Конфигурация TypeScript: убедитесь, что включен режим
strict - Конфликты ESLint + Prettier: используйте
eslint-config-prettierдля отключения конфликтующих правил - Медленные сборки: попробуйте использовать Vite или esbuild для ускорения разработки
- Отсутствие определений типов: установите пакет
@typesдля всех зависимостей - Проблемы отладки: убедитесь, что карты исходного кода правильно настроены
Рекомендуемые инструменты
- Менеджеры пакетов: Vite, Webpack, Parcel
- Тестирование: Jest, React Testing Library, Cypress
- Линтинг/форматирование: ESLint, Prettier, Stylelint
- Документация: TypeDoc, Storybook
- Производительность: Web Vitals, Lighthouse