Декларация не будет отправлена ​​из-за использования личного имени - PullRequest
2 голосов
/ 31 января 2020

Я пытаюсь преобразовать проект в TypeScript, и у меня настроено большинство вещей, но я все еще пытаюсь собрать последние несколько частей. Я хочу иметь возможность использовать этот проект TypesScript из обычного проекта JavaScript, поэтому я понимаю, что мне нужно создавать файлы d.ts для моих существующих источников. Мои источники все. js в настоящее время, и мы планируем постепенно переходить на TS со временем. Моя проблема заключается в получении объявлений для отправки с текущими инструкциями export / require.

Простая демонстрация проблемы:

mod1. js

class MyClass {
    constructor(name) {
        this.name = name;
    }
}

module.exports = {
    MyClass,
};

mod2 . js

const mod1 = require('./mod1');

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

Как только я пытаюсь экспортировать MyClass в mod2 для перенаправления пространства имен, из которого можно получить доступ к MyClass при использовании проекта, я получаю Declaration emit for this file requires using private name 'MyClass' from module '"mod1"'. An explicit type annotation may unblock declaration emit.ts(9006)

У нас есть много маршрутов в нашей кодовой базе, группы файлов, которые содержат различные классы, и затем мы используем файлы index. js на каждом уровне dir, чтобы определить, какие элементы доступны в этом пространстве имен, и иногда набор элементов пользовательского интерфейса, которые являются экземплярами экземпляров классов, поэтому мы можем выполнять такие вызовы, как:

const {app, appui} = require('our-cool-app');
app.feature1.doSomething();
appui.component.someButton.click();

Есть ли простое решение, чтобы автоматически получать наши файлы d.ts из источников. js?

...