فهرست سرفصل‌های TypeScript
خانه (Home) معرفی (Introduction) شروع سریع (Get Started) انواع ساده (Simple Types) تعریف صریح و استنتاج نوع (Explicit & Inference) انواع ویژه (Special Types) آرایه ها (Arrays) تاپل ها (Tuples) انواع شیء (Object Types) شمارشی ها (Enums) نام مستعار و اینترفیس ها (Aliases & Interfaces) انواع اتحادی (Union Types) توابع (Functions) تبدیل نوع (Casting) کلاس ها (Classes) جنریک های پایه (Basic Generics) انواع کاربردی (Utility Types) کلیدواژه keyof (Keyof) Null (Null) Definitely Typed (Definitely Typed) به روزرسانی های نسخه 5 (5 Updates) پیکربندی (Configuration) با Node.js (with Node.js) با React (with React) ابزارها (Tooling) انواع پیشرفته (Advanced Types) نگهبان های نوع (Type Guards) انواع شرطی (Conditional Types) انواع نگاشتی (Mapped Types) استنتاج نوع (Type Inference) انواع لیترال (Literal Types) فضای نام (Namespaces) امضاهای ایندکس (Index Signatures) ادغام اعلان ها (Declaration Merging) برنامه نویسی ناهمگام (Async Programming) دکوراتورها (Decorators) در پروژه های JS (in JS Projects) مهاجرت (Migration) مدیریت خطا (Error Handling) بهترین شیوه ها (Best Practices) ادیتور (Editor) تمرین ها (Exercises) آزمون (Quiz) سرفصل دوره (Syllabus) برنامه مطالعه (Study Plan) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
TypeScript

TypeScript — مهاجرت (Migration)

آخرین بروزرسانی: 1404/08/14

مهاجرت (Migration)

می خواهی از جاوااسکریپت به تایپ اسکریپت کوچ کنی؟ «مهاجرت (Migration)» یعنی تغییر آرام و برنامه ریزی شده. با این کار، نگه داری راحت تر می شود و خطاها زودتر می افتند.

فاز آماده سازی

اول پروژه ات را بسنج. سپس مسیر ساخت و وابستگی ها را ثبت کن. همچنین، فایل های اعلان نوع .d.ts را بررسی کن. در پایان، مسیرهای حیاتی را مشخص کن.

شاخه گیت برای مهاجرت

# Create a new branch for the migration\ngit checkout -b typescript-migration\n\n# Commit your current state\ngit add .\n\ngit commit -m "Pre-TypeScript migration state"\n

مشاهده در ادیتور

پیکربندی پایه

نصب تایپ اسکریپت

# Install TypeScript as a dev dependency\nnpm install --save-dev typescript @types/node\n

مشاهده در ادیتور

ساخت tsconfig.json

{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "strict": true,\n    "esModuleInterop": true,\n    "skipLibCheck": true,\n    "forceConsistentCasingInFileNames": true,\n    "outDir": "./dist",\n    "rootDir": "./src"\n  },\n  "include": ["src/**/*"],\n  "exclude": ["node_modules"]\n}\n

مشاهده در ادیتور

نکته: مقدار target را با حداقل پلتفرم های هدف هماهنگ کن.

رویکردهای مهاجرت

مهاجرت تدریجی

{\n  "compilerOptions": {\n    "allowJs": true,\n    "checkJs": true\n  }\n}\n

مشاهده در ادیتور

نکته: برای پروژه های بزرگ، تدریجی بهترین انتخاب است.

همه چیز یک جا

# Rename all JS files to TS\nfind src -name "*.js" -exec sh -c 'mv "$0" "${0%.js}.ts"' {} \;\n

مشاهده در ادیتور

مهاجرت گام به گام

پیکربندی پیشنهادی برای شروع

{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "strict": true,\n    "esModuleInterop": true,\n    "skipLibCheck": true,\n    "forceConsistentCasingInFileNames": true,\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "allowJs": true,\n    "checkJs": true,\n    "noEmit": true\n  },\n  "include": ["src/**/*"],\n  "exclude": ["node_modules", "dist"]\n}\n

مشاهده در ادیتور

فعال سازی بررسی نوع در JS

// @ts-check\n\n/** @type {string} */\nconst name = 'John';\n\n// TypeScript will catch this error\nname = 42;\n

مشاهده در ادیتور

نکته: برای بی اثرکردن موقت، از // @ts-ignore تنها در ضرورت استفاده کن.

تغییر پسوند فایل ها

# Rename a single file\nmv src/utils/helpers.js src/utils/helpers.ts\n\n# Or bulk rename carefully\nfind src/utils -name "*.js" -exec sh -c 'mv "$0" "${0%.js}.ts"' {} \;\n

مشاهده در ادیتور

افزودن حاشیه نویسی نوع

// Before\nfunction add(a, b) {\n  return a + b;\n}\n\n// After\nfunction add(a: number, b: number): number {\n  return a + b;\n}\n\n// With interface\ninterface User {\n  id: number;\n  name: string;\n  email?: string;\n}\n\nfunction getUser(id: number): User {\n  return { id: id, name: 'John Doe' };\n}\n

مشاهده در ادیتور

به روزرسانی اسکریپت های ساخت

{\n  "scripts": {\n    "build": "tsc",\n    "dev": "tsc --watch",\n    "test": "jest"\n  }\n}\n

مشاهده در ادیتور

ابزارهای کمک کننده

ts-migrate

npx ts-migrate-full .\n

مشاهده در ادیتور

TypeStat

npx typestat --init\n

مشاهده در ادیتور

بسته های @types

npm install --save-dev @types/react @types/node\n

مشاهده در ادیتور

چالش های رایج و راه حل

ویژگی های پویا

// Before\nconst user = {};\nuser.name = 'John';\n

مشاهده در ادیتور

با امضای ایندکس یا Type Assertion مشکل را حل کن.

// Option 1: Index signature\ninterface User {\n  [key: string]: any;\n}\nconst u1: User = {};\nu1.name = 'John';\n\n// Option 2: Type assertion\nconst u2 = {} as { name: string };\nu2.name = 'John';\n

مشاهده در ادیتور

بستن this در کال بک ها

class Counter {\n  count = 0;\n  increment() {\n    setTimeout(() => {\n      this.count++;\n    }, 1000);\n  }\n}\n

مشاهده در ادیتور

ادامه مسیر

برای تایپ دهی در JS ببین JSDoc در پروژه های JS. برای مدیریت خطا ادامه بده به مدیریت خطا. همچنین الگوهای فراگیر را در دکوراتورها ببین.

جمع بندی سریع

  • با پیکربندی درست شروع کن.
  • تدریجی مهاجرت کن، نه شتاب زده.
  • allowJs و checkJs را فعال کن.
  • پسوندها را آرام تغییر بده.
  • ابزارها را هوشمندانه استفاده کن.