我有一个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
的东西吗? - 我需要申报进口吗(
fs
和path
)?
编辑:
后多一点研究和摆弄,我想我已经找到了我自己的解决方案。据我所知,外部模块描述/声明必须是一个模块 - 这意味着它必须导入或导出一些东西:在这种情况下,它必须导出声明和声明的常量作为默认导出:
export declare const fileContent: string;
export default fileContent;
仍引发相同的错误。我想我找到了工作解决方案,我会更新我的问题。 – headacheCoder