TypeScript vositalari (tooling)
TypeScript ishlab chiqish ekotizimi
TypeScript-ning asboblar ekotizimi uning eng kuchli tomonlaridan biri bo‘lib, ishlab chiquvchilarga rivojlanishning har bir bosqichi uchun kuchli vositalarni taqdim etadi:
Kod sifati
- TypeScript-ni qo‘llab-quvvatlaydigan ESLint
- Turni tekshirish va linting
- Kod uslubini qo‘llash
Rivojlanish
- VS Code integratsiyasi
- Nosozliklarni tuzatish vositalari
- Hot Module Replacement (HMR)
Qurish va joylashtirish
- Bundlers (Vite, Webpack, Parcel)
- Modullarni birlashtirish
- Ishlab chiqarishni optimallashtirish
ESLint bilan bo‘yash
Set
ESLint TypeScript sintaksisi va qoidalarini tushunishi uchun ESLint va rasmiy TypeScript plaginini/parserini o‘rnating.
Misol
# Install ESLint with TypeScript support
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
Konfiguratsiya
Ushbu konfiguratsiya TypeScript uchun tavsiya etilgan ESLint qoidalarini yoqadi, ESLint-ni tsconfig-ga turini bilish uchun liniyalash uchun ulaydi va bir nechta umumiy qoidalarni o‘zgartiradi.
Misol
// .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 skriptlari
Linting va faqat turdagi tekshiruvni ishga tushirish uchun skriptlarni qo‘shing.
Oddiy muammolarni avtomatik tuzatish uchun lint:fix dan foydalaning.
Misol
// package.json
{
"scripts": {
"lint": "eslint . --ext .ts,.tsx",
"lint:fix": "eslint . --ext .ts,.tsx --fix",
"type-check": "tsc --noEmit"
}
}
Prettier bilan kodni formatlash
Prettier sizning jamoangiz bo‘ylab izchil kod uslubini qo‘llaydi.
Formatlash bilan bog‘liq lint xatolarining oldini olish uchun uni ESLint bilan birlashtiring.
Set
ESLint orqali qarama-qarshi qoidalar va sirt formatlash muammolarini o‘chiradigan Prettier plus ESLint plaginlarini o‘rnating.
Misol
# Install Prettier and related packages
npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier
Konfiguratsiya
.prettierrc da Prettier afzalliklarini belgilang va .prettierignore da yaratilgan jildlarga e’tibor bermang.
Misol
// .prettierrc
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"printWidth": 100,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "avoid"
}
// .prettierignore
node_modules
build
dist
.next
.vscode
ESLint bilan integratsiya
plugin:prettier/recommended kengaytiring, shunda formatlash muammolari ESLint muammolari sifatida xabar qilinadi.
Misol
// .eslintrc.json
{
"extends": [
// ... other configs
"plugin:prettier/recommended" // Must be last in the array
]
}
Misol: Prettierni ESLint bilan birlashtiring
npm install --save-dev eslint-config-prettier eslint-plugin-prettier
# In your .eslintrc.js or .eslintrc.json, add:
{
"extends": ["plugin:prettier/recommended"]
}
Zamonaviy qurilish asboblari
Vite tez ishlab chiqaruvchi server va zamonaviy tuzilmalar uchun tavsiya etilgan tanlovdir.
Veb-paket keng tarqalgan va yuqori darajada sozlanishi mumkin.
Vite (tavsiya etiladi)
Vite yordamida yangi React + TypeScript loyihasini yarating.
Tez fikr-mulohaza uchun HMR bilan ishlab chiqaruvchi serverni ishga tushiradi.
Misol
# Create a new project with React + TypeScript
npm create vite@latest my-app -- --template react-ts
# Navigate to project directory
cd my-app
# Install dependencies
npm install
# Start development server
npm run dev
Webpack konfiguratsiyasi
Agar siz Webpack-ni tanlasangiz, bu minimal sozlash TypeScript-ni o‘tkazadi, CSS-ni boshqaradi va ilovangizga webpack-dev-server bilan xizmat qiladi.
Misol
// 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 konfiguratsiyasi
Zamonaviy brauzerlarga mo‘ljallangan qat’iy tsconfig.json.
Ixtiyoriy baseUrl va paths @/components/Button kabi mutlaq importlarga yordam beradi.
Misol
// 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"]
}
Rivojlanish muhitini sozlash
Tahrirlovchingizni lint xatolarini aniqlash, saqlash vaqtida formatlash va samarali debug qilish uchun sozlang.
VS kod kengaytmalari
VS kodi uchun tavsiya etilgan kengaytmalar:
- TypeScript + Webpack Problem Matchers - Xatolar haqida yaxshiroq hisobot berish uchun
- ESLint - ESLintni VS kodiga birlashtiradi
- Prettier - Code formatter - Kodni izchil formatlash uchun
- Path IntelliSense - Fayl nomlarini avtomatik to‘ldirish
- Error Lens - Inline xatolarni ko‘rsatish
VS kod sozlamalari
Prettier-dan standart formatlovchi sifatida foydalaning, saqlashda ESLint muammolarini tuzating va nisbiy bo‘lmagan import yo‘llarini afzal ko‘ring.
Misol
// .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"
}
Nosozliklarni tuzatish konfiguratsiyasi
Chrome-ni ishlab chiqaruvchi serveringizga qarshi ishga tushiring va Node.js-ga asoslangan test tuzatishni to‘g‘ridan-to‘g‘ri VS kodidan ishga tushiring.
Misol
// .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
}
]
}
Sinovni sozlash
Jest with Testing Library - bu React + TypeScript ilovalarini sinab ko‘rish uchun mashhur sozlama.
Jest + Test kutubxonasi
DOM tasdiqlari va foydalanuvchi o‘zaro ta’siri uchun Jest, TypeScript qo‘llab-quvvatlash va React Testing Library yordam dasturlarini o‘rnating.
Misol
# Install testing dependencies
npm install --save-dev jest @types/jest ts-jest @testing-library/react @testing-library/jest-dom @testing-library/user-event
Jest konfiguratsiyasi
ts-jest dan foydalanish, CSS modullarini xaritalash va @/ kabi taxallus yo‘llarini hal qilish uchun Jestni sozlang.
Misol
// 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)'],
};
Sinov namunasi
Sinov kutubxonasi yordamida renderlash va bosish harakatlarini tekshiradigan oddiy komponent testi.
Misol
// 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);
});
});
Eng yaxshi amaliyotlar
Rivojlanish ish jarayoni
- Issiq qayta yuklash bilan ishlab chiqish uchun
npm run devdan foydalaning - TypeScript turlarini tekshirish uchun
npm run type-checkni ishga tushiring - Linting xatolarini tekshirish uchun
npm run lintdan foydalaning - Ishlab chiqarishni yaratish uchun
npm run buildishga tushiring
Ishlashni optimallashtirish
- Dinamik import bilan kodni ajratishdan foydalaning
- Ishlab chiqarish inshootlarida daraxt silkitishni yoqing
- Qimmatbaho hisob-kitoblar uchun
React.memovauseMemodan foydalaning - Muhim bo‘lmagan komponentlarni kechiktirib yuklang (lazy loading)
Umumiy tuzoqlar
- TypeScript configuration:
strictrejimi yoqilganligiga ishonch hosil qiling - ESLint + Prettier conflicts: Qarama-qarshi qoidalarni o‘chirish uchun
eslint-config-prettierdan foydalaning - Slow builds: Tezroq rivojlanish uchun Vite yoki esbuild-dan foydalanishni o‘ylab ko‘ring
- Missing type definitions: Barcha bog‘liqliklar uchun
@typespaketlarni o‘rnating - Debugging issues: Manba Map’lari to‘g‘ri sozlanganligiga ishonch hosil qiling
Tavsiya etilgan asboblar
- Bundlers: Vite, Webpack, Parcel
- Testing: Jest, React Testing Library, Cypress
- Linting/Formatting: ESLint, Chiroyli, Stylelint
- Documentation: TypeDoc, Hikoyalar kitobi
- Performance: Web Vitals, Lighthouse
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
