логотип PurpleSchool
Иконка входа
Вход
логотип PurpleSchool

Пространства имен в TypeScript

Автор

Дмитрий Нечаев

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

Определение пространства имен

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

Пример определения пространства имен

namespace MyNamespace {
    export class MyClass {
        greet() {
            console.log("Hello from MyClass");
        }
    }

    export function myFunction() {
        console.log("Hello from myFunction");
    }

    export const myVariable = "Hello from myVariable";
}

В этом примере пространство имен MyNamespace содержит класс MyClass, функцию myFunction и переменную myVariable. Все они экспортируются с помощью ключевого слова export, чтобы быть доступными за пределами пространства имен.

Использование пространства имен

Для использования элементов пространства имен вне его, необходимо указать полное имя пространства имен.

Пример использования пространства имен

MyNamespace.myFunction(); // "Hello from myFunction"

let obj = new MyNamespace.MyClass();
obj.greet(); // "Hello from MyClass"

console.log(MyNamespace.myVariable); // "Hello from myVariable"

В этом примере мы обращаемся к элементам пространства имен MyNamespace через его полное имя.

Вложенные пространства имен

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

Пример вложенных пространств имен

namespace OuterNamespace {
    export namespace InnerNamespace {
        export class InnerClass {
            sayHello() {
                console.log("Hello from InnerClass");
            }
        }
    }
}

let innerObj = new OuterNamespace.InnerNamespace.InnerClass();
innerObj.sayHello(); // "Hello from InnerClass"

В этом примере пространство имен InnerNamespace вложено в OuterNamespace, и класс InnerClass определяется внутри InnerNamespace.

Импорт пространств имен

Для удобства можно импортировать элементы пространства имен в текущую область видимости с помощью ключевого слова import.

Пример импорта пространства имен

import MyNS = MyNamespace;

MyNS.myFunction(); // "Hello from myFunction"

let obj2 = new MyNS.MyClass();
obj2.greet(); // "Hello from MyClass"

console.log(MyNS.myVariable); // "Hello from myVariable"

В этом примере мы импортируем пространство имен MyNamespace под псевдонимом MyNS, что упрощает доступ к его элементам.

Примеры использования пространств имен в реальных задачах

Пример: Организация кода в библиотеке

namespace Geometry {
    export namespace Shapes {
        export class Circle {
            constructor(public radius: number) {}

            getArea(): number {
                return Math.PI * this.radius * this.radius;
            }
        }

        export class Rectangle {
            constructor(public width: number, public height: number) {}

            getArea(): number {
                return this.width * this.height;
            }
        }
    }

    export namespace Utils {
        export function logShapeArea(shape: { getArea: () => number }) {
            console.log("Area:", shape.getArea());
        }
    }
}

let circle = new Geometry.Shapes.Circle(5);
let rectangle = new Geometry.Shapes.Rectangle(10, 20);

Geometry.Utils.logShapeArea(circle); // "Area: 78.53981633974483"
Geometry.Utils.logShapeArea(rectangle); // "Area: 200"

В этом примере пространство имен Geometry содержит вложенные пространства имен Shapes и Utils, которые организуют классы и функции, связанные с геометрическими фигурами.

Заключение

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

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile