В TypeScript модули используются для организации кода и разделения его на отдельные файлы, что облегчает его повторное использование и поддержку. В TypeScript есть два типа модулей: внутренние и внешние модули.

**Внутренние модули

Внутренние модули, также называемые пространствами имен (namespaces), позволяют группировать связанный код в одном месте. Они могут содержать классы, интерфейсы, функции и другие объекты и могут быть вложенными. Внутренние модули описываются с помощью ключевого слова namespace.

namespace MyNamespace {
  export interface Person {
    name: string;
    age: number;
  }
 
  export function sayHello(person: Person) {
    console.log(
      `Hello, my name is ${person.name} and I am ${person.age} years old.`,
    );
  }
}
 
const person: MyNamespace.Person = { name: "John", age: 30 };
MyNamespace.sayHello(person); // Output: 'Hello, my name## Внешние модули (External Modules)

**Внешние модули

Внешние модули, также называемые модулями CommonJS или AMD, позволяют загружать код из отдельных файлов и использовать его в других проектах. Внешние модули могут импортировать и экспортировать объекты, функции, классы и другие элементы кода.

Внешний модуль определяется в отдельном файле, который может быть загружен с помощью инструментов сборки, таких как Webpack или Rollup. Для экспорта элементов из модуля используется ключевое слово export, а для импорта элементов из других модулей используется ключевое слово import.

Вот пример определения и использования внешнего модуля:

// myModule.ts
export interface Person {
  name: string;
  age: number;
}
 
export function sayHello(person: Person) {
  console.log(
    `Hello, my name is ${person.name} and I am ${person.age} years old.`,
  );
}
// app.ts
import { Person, sayHello } from "./myModule";
 
constperson: Person = { name: "John", age: 30 };
sayHello(person); // Output: 'Hello, my name is John and I am 30 years old.'

В этом примере мы определили внешний модуль myModule, который экспортирует интерфейс Person и функцию sayHello(). Затем мы импортировали эти элементы в файл app.ts, создали объект person типа Person и передали его в функцию sayHello().

**Различия между внутренними и внешними модулями

Основное различие между внутренними и внешними модулями заключается в том, что внутренние модули используются для организации кода в рамках одного проекта, а внешние модули используются для распространения кода между различными проектами и библиотеками.


Назад