Экспортный конструктор и enum в пакет npm - PullRequest
1 голос
/ 12 марта 2019

У меня нет большого опыта работы с NPM или Node.js, моя работа с JavaScript в основном ограничена веб-браузерами. Я написал библиотеку JavaScript, которая обеспечивает две вещи: 1. функцию конструктора и 2. тип enum.

Конечно, в JavaScript нет настоящих «перечислений», поэтому мой JS-файл в основном выглядит так:

function MyClass() {
    // Implementation
    this.doWork = function () {
        // ...
        return MyEnum.Success;
    };
}

var MyEnum = {
    Error: 0,
    Success: 1,
    Something: 2,
    More: 3
    // etc.
    // I could probably use Object.define here to make it constant
};

Функция MyClass использует свойства из MyEnum внутри, а MyEnum также полезна для вызывающей стороны MyClass. Так что оно должно оставаться публичным.

Теперь пакет npm может экспортировать только свойства основного объекта или самого объекта. Я мог бы сделать эти вещи:

module.exports = MyClass;

Или

module.exports = {
    MyClass: MyClass,
    MyEnum: MyEnum
};

В первом случае легко использовать класс напрямую, но MyEnum теряется.

let MyClass = require("myclass");
let x = new MyClass();
// Where is MyEnum?

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

let MyClass = require("myclass");
let x = new MyClass.MyClass();
if (x.doWork() === MyClass.MyEnum.Success) { }

Что я могу сделать, чтобы решить эту проблему и сделать конструктор доступным напрямую, как это кажется нормальным, а также экспортировать перечисление?

1 Ответ

2 голосов
/ 12 марта 2019

Просто сделать enum свойством объекта функции?

// myclass.js
// ...
MyClass.MyEnum = MyEnum;
module.exports = MyClass;

// elsewhere.js
let MyClass = require("myclass");
let x = new MyClass();
if (x.doWork() === MyClass.MyEnum.Success) { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...