Что такое Namespaces

Ответ

Namespaces в JavaScript (или TypeScript) позволяют организовывать код в логические группы, предотвращая конфликты имен. Они особенно полезны в глобальной области видимости.

Пример с TypeScript:

namespace MyUtils {
  export function log(message: string) {
    console.log(message);
  }
}

MyUtils.log("Hello"); // Работает
log("Hi"); // Ошибка: функция не найдена

Особенности:

  • Инкапсулируют код, делая его доступным только внутри namespace
  • Могут быть вложенными
  • В современном JS/TS часто заменяются модулями (import/export)
  • В TypeScript компилируются в IIFE (самовызывающиеся функции)

Ответ 18+ 🔞

Смотри, вот тебе про эти ваши namespace'ы в JavaScript, а то народ путается, как последние идиоты. Ну, в TypeScript, если точнее, но суть одна.

Представь, что у тебя в проекте бардак, как в моей голове после пятницы. Функции, переменные — всё летает в глобальной области, как мухи на говне. Один назвал функцию log, другой тоже log, а третий, пидор, ещё и log — и пошла пиздёж, всё сломалось, потому что имена конфликтуют.

Так вот, namespace — это такой ящик, куда ты можешь сложить свой код, чтобы он не мозолил глаза другим. Как будто ты в общежитии живёшь и пишешь на своей зубной щётке «НЕ ТРОГАТЬ, СУКА!».

Вот смотри, как это выглядит:

namespace MyUtils {
  export function log(message: string) {
    console.log(message);
  }
}

MyUtils.log("Hello"); // Всё работает, красота!
log("Hi"); // А вот тут — пизда! Ошибка, функция не найдена. Она же внутри ящика!

Ключевые моменты, чтобы не быть мудаком:

  • Инкапсуляция, блядь. Всё, что внутри namespace, там и остаётся. Если не пометил export — это твой личный секрет, как и то, что ты в детстве сосал сосульку с собачьей мочой. Никто снаружи не увидит.
  • Можно вкладывать, как матрёшку. Один namespace внутри другого. Получается овердохуища вложенность, но иногда так и надо.
  • Сейчас это немного старовато. Все умные дяди теперь используют модули (import/export). Это как перейти с лаптей на кроссовки. Но namespace'ы ещё живы, особенно в легаси-коде, который писал ваш дядя Ваня в 2015-м.
  • Под капотом в TypeScript это всё компилируется в какую-то хитрую хуйню — IIFE (самовызывающиеся функции), чтобы изолировать твой код по-настоящему.

Короче, namespace — это способ не обосраться с именами, когда проект растёт. Но если ты только начинаешь — смотри в сторону модулей, а то опоздаешь на поезд, как я на свою свадьбу.