繁体   English   中英

用于打字的TypeScript外部节点模块声明文件

[英]TypeScript External Node Module Declaration File For Typings

我有一个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在这个领域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内容的.d.ts示例文件。 我还注意到我不应该在命名空间/模块中使用export default ,这导致我无法理解如何声明模块的默认导出。

这是我的问题:

  • 我该怎么做正确的方法?
  • 如何确保TypeScript识别default属性?
  • 我需要使用declare module东西吗?
  • 我是否需要声明导入( fspath )?

编辑:

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

export declare const fileContent: string;
export default fileContent;

error TS2656: ... is not a module尝试使用ES6样式导入时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...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM