2016-05-20 2 views
1

У меня есть модуль 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; 

ответ

0

error TS2656: ... is not a module происходит при попытке использовать ES6 импорт стилей и определение не экспортирует модуль.

Я предлагаю изменить свое определение

declare module MyModule { 
    export const fileContent: string; 
} 

declare module "my-module" { 
    export default MyModule 
} 

Поскольку это определение теперь «по умолчанию экспорта» модуль, он может быть импортирован с помощью ES6 импорта синтаксиса

import MyModule from "my-module" 

по умолчанию затем использовать его

MyModule.fileContent... 
+0

По-прежнему бросает ту же ошибку. Я думаю, что я нашел рабочее решение, и я обновлю свой вопрос. – headacheCoder

Смежные вопросы