Функции, включенные из прототипа в класс javascript, не отображаются в автозаполнении редактора - PullRequest
0 голосов
/ 30 октября 2019

У меня следующая проблема, я создал библиотеку. какие его методики находятся в отдельных файлах writeLog.js в папке с именем ./lib. и у меня есть index.js файл, который исследует эту папку и извлекает функцию и помещает то же имя, что и файл, в качестве имени функции.

пример: writeLog.js

, а затем я могуuse

    let jsPackTools require('./index');
        let utils = new jsPackTools();
        utils.writeLog('test');

Способ добавления методов к классам - через прототип. папка сканируется с помощью readdirSync (), а затем я беру имя файла, чтобы поместить его в require ().

код следующий:

   fs.readdirSync(__dirname+'/lib').forEach(modules => {
        let module = modules.split('.').shift();
        jsPackTools.prototype[module] =require(\`${__dirname}/lib/${module}\`);
    });

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

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

Я пробовал с:

   const writeLog = require('./lib/writeLog');

    class jsPackTools {
       get writeLog() { return writeLog.bind(this) }
    }

Это позволяет идеально индексировать. однако, я не делаю логотипа, делаю это динамически.

Идея состоит в том, что класс не знает, каковы его методы, до тех пор, пока папка . / lib не будет сканирована и все методы не будут извлечены. Таким образом, вы можете добавлять функции по отдельности, и когда вы используете их, вы можете видеть. Я не хочу использовать транспиляторы, я думал об использовании d.ts, но необходимо использовать typeScript, но цель состоит в том, чтобы создать эту библиотеку без зависимостей или как можно меньше.

...