ابزارها (Tooling)
اینجا درباره «ابزارهای تایپ اسکریپت» حرف می زنیم. ابزار یعنی برنامه کمکی برای کدنویسی بهتر. بنابراین کدت مرتب تر می شود و خطاها زودتر دیده می شوند. مثل داشتن خط کش و پاک کن کنار دفتر مشق.
اکوسیستم توسعه تایپ اسکریپت
چرخ دنده های اصلی این اکوسیستم چنین اند: کیفیت کد با ESLint، قالب بندی با Prettier، ساخت با Vite یا Webpack، و آزمون با Jest. سپس همه در ادیتور هماهنگ می شوند.
Lint با ESLint
«لینت (Lint)» یعنی یابنده ایرادهای سبک و الگوی کد. این کمک می کند تیم یکدست بنویسد.
# Install ESLint with TypeScript support
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
حالا پیکربندی پیشنهادی را اضافه کن تا قوانین پیشنهادی فعال شوند.
// .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 را نیز برای اجرا سریع اضافه کن.
// package.json
{
"scripts": {
"lint": "eslint . --ext .ts,.tsx",
"lint:fix": "eslint . --ext .ts,.tsx --fix",
"type-check": "tsc --noEmit"
}
}
قالب بندی کد با Prettier
«قالب بندی (Formatting)» یعنی یک شکل کردن ظاهر کد. Prettier این کار را خودکار انجام می دهد.
# Install Prettier and related packages
npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier
تنظیمات پیشنهادی را در فایل های مخصوص ذخیره کن.
// .prettierrc
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"printWidth": 100,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "avoid"
}
// .prettierignore
node_modules
build
dist
.next
.vscode
برای جلوگیری از تداخل قوانین، این افزونه ESLint را آخر اضافه کن.
// .eslintrc.json
{
"extends": [
"plugin:prettier/recommended"
]
}
ابزارهای ساخت مدرن
Vite برای توسعه سریع عالی است. Webpack هم بسیار قابل پیکربندی است. هرکدام سرور توسعه و باندل نهایی می سازند.
# Create a new project with React + TypeScript
npm create vite@latest my-app -- --template react-ts
cd my-app
npm install
npm run dev
اگر Webpack می خواهی، نمونه کمینه زیر را ببین.
// 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,
},
};
یک tsconfig سخت گیر هم برای مرورگرهای مدرن تنظیم کن.
// 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 افزونه ESLint و Prettier را نصب کن. سپس خطاها و قالب بندی هنگام ذخیره اعمال می شوند.
// .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"
}
آزمایش (Testing) با Jest
«آزمایش (Test)» یعنی مطمئن شدن از رفتار درست کد. Jest و Testing Library برای ری اکت محبوب اند.
# Install testing dependencies
npm install --save-dev jest @types/jest ts-jest @testing-library/react @testing-library/jest-dom @testing-library/user-event
تنظیم نمونه Jest با ts-jest و نگاشت مسیرها:
// 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)'],
};
نمونه تست یک دکمه با کلیک:
// 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('renders button with correct text', () => {
render(<Button>Click me</Button>);
expect(screen.getByRole('button', { name: /click me/i })).toBeInTheDocument();
});
it('calls onClick when clicked', () => {
const handleClick = jest.fn();
render(<Button onClick={handleClick}>Click me</Button>);
fireEvent.click(screen.getByRole('button'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
});
جمع بندی سریع
- ابزارهای تایپ اسکریپت نظم و سرعت می دهند.
- ESLint خطاهای سبک را می گیرد.
- Prettier ظاهر کد را یکسان می کند.
- Vite یا Webpack پروژه را می سازند.
- Jest رفتار کد را می سنجد.
برای ادامه، صفحه با React (with React) را ببین و از ابزارهای تایپ اسکریپت در پروژه استفاده کن. برای تنظیمات پایه نیز پیکربندی را بررسی کن.