У меня есть модуль Node.js (index.js
), который был transpiled с Бабелем в код следующим образом:машинопись Внешний узел модуля Декларация файла Для типизации
// My stuff ...
var fs = require("fs");
var path = require("path");
exports.fileContent = fs.readFileSync(
path.join(__dirname, "file.txt"),
'utf8'
);
// Babel compiler stuff ...
Object.defineProperty(
exports,
"__esModule",
{ value: true }
);
// My stuff again ...
exports.default = exports.fileContent;
Использование в Node.js будет:
var myModule = require("my-module");
doSomethingWithIt(myModule.fileContent);
насколько я понимаю, мне нужно создать файл в .d.ts
декларации и ссылаться на него в typings
поле в моем package.json
. А также этот файл декларации должен быть модулем. Итак, мой первый подход после прочтения нескольких учебников по этой теме было:
Но, к сожалению, это был провал:
[...] error TS2656: Exported external package typings file 'index.d.ts' is not a module. [...]
Мой следующий подход должен был избавиться от declare module
вещи:
export const fileContent: string;
export default fileContent;
Это работает для меня, но, тем не менее, это не так, поскольку я не нашел файл примера .d.ts
, который не использует материал declare
. Я также заметил, что я не должен использовать export default
в пространстве имен/модуле, что приводит меня к тому, что я не понимаю, как вообще объявить экспорт моего модуля по умолчанию.
Вот мои вопросы:
- Как это сделать правильный путь?
- Как я могу убедиться, что TypeScript распознает свойство
default
? - Нужно ли использовать материал
declare module
? - Нужно ли объявлять импорт (
fs
иpath
)?
Edit:
После того, как немного больше исследовать и возился, я думаю, я нашел решение самостоятельно. Насколько я понимаю, внешнее описание/объявление модуля должно быть модулем, что означает, что ему нужно импортировать или экспортировать что-то: в этом случае он должен экспортировать декларацию и объявленную константу в качестве экспорта по умолчанию:
export declare const fileContent: string;
export default fileContent;
По-прежнему бросает ту же ошибку. Я думаю, что я нашел рабочее решение, и я обновлю свой вопрос. – headacheCoder