2016-05-20 35 views
1

我有一个Node.js的模块(index.js)已经transpiled与巴贝尔到代码如下:在Node.js的打字稿外部节点模块声明文件对于分型

// 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; 

用法是:

var myModule = require("my-module"); 

doSomethingWithIt(myModule.fileContent); 

据我了解,我需要创建一个.d.ts申报文件,并在我的package.json引用它在typings领域。而且,这个声明文件必须是一个模块。所以,我阅读有关此主题的几个教程后,第一种方法是:

但可悲的是,这是一个失败:

[...] 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的东西吗?
  • 我需要申报进口吗(fspath)?

编辑:

后多一点研究和摆弄,我想我已经找到了我自己的解决方案。据我所知,外部模块描述/声明必须是一个模块 - 这意味着它必须导入或导出一些东西:在这种情况下,它必须导出声明和声明的常量作为默认导出:

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