我有一个Node.js模块(index.js
)已经使用Babel转换为代码,如下所示:
// 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
的{{1}}字段中引用它。此外,此声明文件必须是一个模块。所以我在阅读了几个关于这个主题的教程后的第一个方法是:
package.json
但遗憾的是,这是一次失败:
// index.d.ts
declare module "my-module" {
export const fileContent: string;
export default fileContent;
}
我的下一个方法是摆脱[...] 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
属性?default
内容?declare module
和fs
)?修改
经过一番研究和调整后,我想我已经找到了解决方案。据我所知,外部模块描述/声明必须是一个模块 - 这意味着它必须导入或导出一些东西:在这种情况下,它必须将声明和声明的常量导出为默认导出:
path
答案 0 :(得分:0)
error TS2656: ... is not a module
,并且定义未导出模块。
我建议您将定义更改为
declare module MyModule {
export const fileContent: string;
}
declare module "my-module" {
export default MyModule
}
由于此定义现在是“默认导出”模块,因此可以使用默认的ES6导入语法导入
import MyModule from "my-module"
然后使用它
MyModule.fileContent...