如何导入在index.d.ts中定义的名称空间

时间:2019-07-19 22:25:21

标签: typescript

尝试通过以下方式将xmlbuilder导入到我的打字稿类中

import { xmlbuilder } from "xmlbuilder/typings/index";

我知道了

  

错误:(2,10)TS2305:模块'../node_modules/xmlbuilder/typings/index“'没有导出的成员'xmlbuilder'。

在index.d.ts(https://github.com/oozcitak/xmlbuilder-js/blob/master/typings/index.d.ts)中,

export = xmlbuilder;

declare namespace xmlbuilder { 
  ...
}

2 个答案:

答案 0 :(得分:0)

您正在尝试导入类型定义,而不是实际的类型。

您应使用以下代码:

import xmlbuilder from "xmlbuilder"

类型定义只是向TypeScript描述JavaScript对象的外观的简单方法。这样一来,用JavaScript编写的文件就可以由TypeScript编译器解释,而使用TypeScript编写的已编译JS文件可以从JS文件中使用。


如注释中所述,当模块没有默认导出时,您应该使用别名来导入整个模块。

import * as xmlbuilder from "xmlbuilder"

这等效于使用require("xmlbuilder")

答案 1 :(得分:0)

许多人不建议使用名称空间,在这种情况下,使用模块定义会更有意义。

这是这样写的:

declare module 'xmlbuilder' {
  // export types that describe the module here
}

现在,当您导入xmlbuilder时,它应该会自动具有正确的类型(前提是您已正确配置tsconfig)。

您将需要在tsconfig中定义自定义typeRoots(类型声明的目录)的路径。

可以在here中找到有关定义typeRoots的更多信息。

您可以详细了解名称空间和模块声明here之间的区别。