import/export asoslari, import type, uchinchi tomon kutubxonalari uchun @types paketlari va o'z .d.ts deklaratsiya fayllaringizni yozish — chuqur test va debugging mashqlari bilan.
Bu bob — TypeScript kodini modullarga bo'lish, uchinchi tomon JavaScript kutubxonalari bilan ishlash va o'z tip deklaratsiyalaringizni yozishni chuqur yoritadi.
index.tsTypeScript// mathUtils.tsexport function add(a: number, b: number): number {return a + b;}export interface Point {x: number;y: number;}export default class Calculator {add(a: number, b: number) { return a + b; }}// main.tsimport Calculator, { add, Point } from "./mathUtils";import * as MathUtils from "./mathUtils";const point: Point = { x: 1, y: 2 };
index.tsTypeScript// Faqat tur sifatida import qilish (runtime'da hech qanday JS kodi generatsiya qilinmaydi)import type { Point } from "./mathUtils";// Yoki inlineimport { type Point, add } from "./mathUtils";
💡 Key Idea
import type — agar siz faqat TUR (interfeys, type alias)ni import qilayotgan bo'lsangiz, buni aniq belgilash orqali, build vositalariga (masalan bundler'larga) "bu import faqat compile vaqtida kerak, uni yakuniy JS bundle'ga qo'shmang" deb signal berish mumkin.
Ko'p mashhur JavaScript kutubxonalari (masalan lodash, express) o'zlari TypeScript bilan yozilmagan. Ular uchun tip deklaratsiyalari alohida @types/ paketlari orqali taqdim etiladi (DefinitelyTyped loyihasi orqali).
terminal.shBashnpm install lodashnpm install -D @types/lodash
index.tsTypeScriptimport _ from "lodash";_.chunk([1, 2, 3, 4], 2); // TypeScript endi 'chunk' funksiyasining turlarini "biladi"
⚠️ Common Mistake
@types/ paketini o'rnatishni unutish — bu holda TypeScript kutubxonani any deb qabul qiladi (agar noImplicitAny yoqilgan bo'lsa, hatto xato ham berishi mumkin), va barcha tip xavfsizligi yo'qoladi.
index.tsTypeScript// types/custom.d.tsdeclare module "some-untyped-library" {export function doSomething(value: string): number;}// Global obyektni kengaytirish (masalan window)declare global {interface Window {myCustomProperty: string;}}window.myCustomProperty = "salom"; // Endi TypeScript buni tanийdi
Task: Ikkita faylga (utils.ts, main.ts) bo'lingan kichik loyiha yarating, utils.tsdan bir nechta funksiyani export/import qiling.
Task: Uchinchi tomon kutubxonasi (masalan date-fns yoki uuid)ni o'rnatib, agar kerak bo'lsa mos @types/ paketini ham qo'shib, uni TypeScript loyihangizda ishlating.
Stsenariy: Loyihangizga some-old-library kutubxonasini o'rnatdingiz, lekin TypeScript "Could not find a declaration file for module 'some-old-library'" xatosini bermoqda.
Your Task: Bu muammoni hal qilishning ikkita yo'lini toping.
<details> <summary>Solution</summary> 1. `@types/some-old-library` paketini o'rnatishga urinish: `npm install -D @types/some-old-library` (agar mavjud bo'lsa). 2. Agar `@types/` paketi mavjud bo'lmasa, o'zingiz minimal deklaratsiya yozish: loyihangizda `declare module "some-old-library";` (bo'sh deklaratsiya, kutubxonani `any` sifatida "tiplaydi", lekin xatoni yo'qotadi) yoki to'liqroq tip ta'riflarini yozish. </details>import/export — kodni modullarga bo'ladi. import type — faqat tur import qilishni aniq belgilaydi, bundle optimallashtirish uchun foydali. @types/ paketlari — tip ma'lumotiga ega bo'lmagan JavaScript kutubxonalarini "tiplash" imkonini beradi. .d.ts fayllar — faqat tip deklaratsiyalarini o'z ichiga oladi.
default export, cheksiz named exportimport type — faqat tur uchun, bundle optimallashtirishga yordam beradi@types/paket-nomi — tip ma'lumotiga ega bo'lmagan kutubxonalar uchun.d.ts — faqat tip ta'riflari, implementatsiyasizindex.tsTypeScriptexport function f() {}export default class C {}import C, { f } from "./module";import type { MyType } from "./types";declare module "untyped-lib" { export function fn(): void; }
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 2 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: