Skip to content

TypeScript Modules

ใน TypeScript, มีหลายวิธีในการจัดการโมดูลเพื่อแบ่งโค้ดออกเป็นหน่วยที่แยกจากกันและจัดการ dependencies ได้อย่างมีประสิทธิภาพ

ESM vs Namespaces
หมวดหมู่NamespacesES6 Modules
การประกาศใช้คำสั่ง namespaceใช้คำสั่ง export และ import
การเข้าถึงใช้ . เพื่อเข้าถึงสมาชิกภายใน namespaceใช้ import เพื่อเข้าถึงสมาชิก
การแยกโค้ดแยกโค้ดในไฟล์เดียวหรือหลายไฟล์โดยใช้ /// <reference>แยกโค้ดในไฟล์ต่างๆ และใช้ import/export
การจัดการชื่อที่ซ้ำกันช่วยป้องกันการชนกันของชื่อใน namespace ที่ต่างกันช่วยป้องกันการชนกันของชื่อในโมดูลต่างๆ
การนำเข้า/ส่งออกใช้ /// <reference> เพื่อเชื่อมโยงไฟล์ใช้ import และ export
การใช้งานใช้ในโปรเจกต์ที่ไม่รองรับโมดูล ES6 หรือโปรเจกต์เก่าใช้ในโปรเจกต์ใหม่ๆ และเป็นมาตรฐานใหม่
ความเข้ากันได้ย้อนหลังใช้ในโปรเจกต์ที่ต้องการความเข้ากันได้ย้อนหลังไม่รองรับการเข้ากันได้ย้อนหลัง
การจัดการโค้ดที่ซับซ้อนอาจทำให้โค้ดยุ่งเหยิงเมื่อต้องการหลาย namespacesมีระบบการจัดการที่ดีกว่า
การสนับสนุนสนับสนุนใน TypeScript แต่ไม่เป็นมาตรฐานใหม่เป็นมาตรฐานใน JavaScript และ TypeScript

ESM (ECMAScript Modules)

ES6 Modules**: ใช้ export และ import สำหรับการจัดกลุ่มโค้ดที่เกี่ยวข้องในไฟล์ต่างๆ มีระบบการจัดการที่ดีขึ้นในการนำเข้าและส่งออกโค้ด และเป็นมาตรฐานใหม่ใน JavaScript และ TypeScript

typescript
// math.ts
export function add(x: number, y: number): number {
  return x + y;
}

export const pi = 3.14;

export class Calculator {
  constructor(private value: number) {}
  add(x: number) {
    this.value += x;
    return this.value;
  }
}
typescript
// main.ts
import { add, pi, Calculator } from './math';

console.log(add(2, 3)); // Output: 5
console.log(pi); // Output: 3.14

const calc = new Calculator(10);
console.log(calc.add(5)); // Output: 15

Namespace

Namespaces**: ใช้สำหรับการจัดกลุ่มโค้ดที่เกี่ยวข้องในไฟล์เดียวหรือหลายไฟล์ โดยใช้คำสั่ง namespace และสามารถใช้ /// <reference> เพื่อเชื่อมโยงไฟล์ที่มี namespaces อื่นๆ นิยมใช้ในโปรเจกต์ที่ไม่รองรับ ES6 modules หรือในโปรเจกต์เก่า

typescript
// myNamespace.ts
namespace MyNamespace {
  export class MyClass {
    constructor(public name: string) {}
    greet() {
      console.log(`Hello, ${this.name}!`);
    }
  }

  export function myFunction() {
    console.log('This is a function inside MyNamespace');
  }
}
typescript
// main.ts
const instance = new MyNamespace.MyClass('Alice');
instance.greet(); // Output: Hello, Alice!

MyNamespace.myFunction(); // Output: This is a function inside MyNamespace

Released under the MIT License