Модулиуд ба namespace
Жижиг төсөлд бүх кодыг нэг файлд бичиж болно. Гэвч төсөл томорч эхлэхэд кодыг логик хэсгүүдэд хуваах хэрэгтэй болдог. TypeScript-д үүний тулд модуль систем ба namespace хэрэглэдэг.
Модуль гэж юу вэ?
TypeScript-д import эсвэл export агуулсан дурын файл нь модуль болдог. Тэдгүйгээр бол глобал скрипт болдог — тэдгээрийн хувьсагчид бүх файлд харагддаг тул нэрийн мөргөлдөөн үүсэх аюултай.
// math.ts — энэ файл модуль
export function нэмэх(а: number, б: number): number {
return а + б;
}
export function хасах(а: number, б: number): number {
return а - б;
}
export const ПИ = 3.14159;
// Анхны утгаар экспортлох
export default function үржих(а: number, б: number): number {
return а * б;
}
// main.ts — импортлох
import үржих, { нэмэх, хасах, ПИ } from "./math";
console.log(нэмэх(5, 3)); // 8
console.log(хасах(10, 4)); // 6
console.log(ПИ); // 3.14159
console.log(үржих(3, 4)); // 12
export-ийн хэлбэрүүд
// types.ts
// 1. Зарлахын хамт экспортлох
export interface Хэрэглэгч {
id: number;
нэр: string;
имэйл: string;
}
export type Үүрэг = "admin" | "хэрэглэгч" | "зочин";
// 2. Тусад нь экспортлох
interface Нийтлэл {
id: number;
гарчиг: string;
агуулга: string;
}
export { Нийтлэл };
// 3. Нэр өөрчлөн экспортлох
interface ДотоодТохиргоо {
хост: string;
порт: number;
}
export { ДотоодТохиргоо as Тохиргоо };
// app.ts — импортлох хэлбэрүүд
import { Хэрэглэгч, Үүрэг } from "./types";
import { Нийтлэл } from "./types";
import { Тохиргоо } from "./types";
// Нэр өөрчлөн импортлох
import { Хэрэглэгч as ХэрэглэгчТөрөл } from "./types";
// Бүгдийг нэг объект болгон импортлох
import * as Төрлүүд from "./types";
const хэрэглэгч: Төрлүүд.Хэрэглэгч = { id: 1, нэр: "Болд", имэйл: "b@b.com" };
Индекс файл ашиглан re-export
Том модулийг нэг цонхоор экспортлохдоо index.ts файл ашиглана:
// components/Button.tsx
export const Button = () => {
/* ... */
};
// components/Input.tsx
export const Input = () => {
/* ... */
};
// components/Modal.tsx
export const Modal = () => {
/* ... */
};
// components/index.ts — бүгдийг нэгтгэн экспортлох
export { Button } from "./Button";
export { Input } from "./Input";
export { Modal } from "./Modal";
// app.ts — нэг замаас бүгдийг авна
import { Button, Input, Modal } from "./components";
// "./components/Button", "./components/Input" гэж тус тусад нь бичихгүй
namespace — нэрийн орон зай
namespace нь холбоотой зүйлсийг нэг нэрийн доор бүлэглэдэг. Одоогийн ихэнх кодонд модуль дээр суурилсан import/export нь хангалттай боловч namespace нь нэрийн мөргөлдөөнөөс хамгаалах нэмэлт давхарга болдог:
// validation.ts
namespace Шалгалт {
export interface Дүрэм {
шаардлагатай?: boolean;
хамгийн_бага?: number;
хамгийн_их?: number;
загвар?: RegExp;
}
export function мөр_шалгах(утга: string, дүрэм: Дүрэм): boolean {
if (дүрэм.шаардлагатай && утга.length === 0) return false;
if (дүрэм.хамгийн_бага && утга.length < дүрэм.хамгийн_бага) return false;
if (дүрэм.хамгийн_их && утга.length > дүрэм.хамгийн_их) return false;
if (дүрэм.загвар && !дүрэм.загвар.test(утга)) return false;
return true;
}
export function тоо_шалгах(утга: number, дүрэм: Дүрэм): boolean {
if (дүрэм.хамгийн_бага !== undefined && утга < дүрэм.хамгийн_бага)
return false;
if (дүрэм.хамгийн_их !== undefined && утга > дүрэм.хамгийн_их) return false;
return true;
}
}
// Хэрэглэх
const зөв = Шалгалт.мөр_шалгах("Болд", { шаардлагатай: true, хамгийн_бага: 2 });
const утас_зөв = Шалгалт.мөр_шалгах("99119911", { загвар: /^\d{8}$/ });
tsconfig.json — модулийн тохиргоо
TypeScript модулийн систем tsconfig.json-д тохируулагддаг:
{
"compilerOptions": {
"module": "ESNext", // ES модуль систем ашиглах
"moduleResolution": "bundler", // Next.js, Vite-тэй ажиллах
"baseUrl": ".", // Харьцангуй замын суурь
"paths": {
"@/*": ["./*"], // @ гэж бичвэл төслийн үндэснээс хайна
"@components/*": ["components/*"],
"@lib/*": ["lib/*"]
}
}
}
// paths тохируулсны дараа
import { Button } from "@components/Button"; // "./../../components/Button" биш
import { апи_дуудах } from "@lib/api";
Модуль систем сайн ойлгосноор том төслийн кодыг цэвэр, эмх цэгцтэй зохион байгуулах боломжтой болно.
Дараагийн хичээлд:
Declaration файл (.d.ts) — TypeScript-д байхгүй JavaScript сангуудад яаж төрлийн мэдэгдэл нэмэх, .d.ts файл хэрхэн бичихийг сурна.