没有定义的npm包的Typescript导入

时间:2018-05-11 20:00:26

标签: javascript typescript

我有一个npm包(@salesforce / canvas-js-sdk),它没有针对它的Typescript定义文件。我正在使用React,因此我使用“import from”语法来引入依赖项。 Visual Studio似乎不喜欢模块没有定义文件。此外,该模块应该在名为Sfdc的“窗口”对象上公开属性。如何在不修改包的情况下为此npm包定义定义文件?

我一直在尝试:

这是我目前的导入语句。

enter image description here

然后我为这个模块定义了一个非常简单的定义。

enter image description here

解决了无法找到模块定义的编译错误。但是,如果我尝试使用Sfdc对象,就像在示例中一样,它不起作用。

以下是文档中有关如何使用纯JavaScript的库的图片。 enter image description here

但是如果我复制并粘贴它,那么代码在运行时对我不起作用。相反,如果我使用

,我只能获得对Sfdc对象的引用

enter image description here

解决方案

因为包是在全局对象上构建的,所以我需要简化import语句。我不能只排除导入,因为包裹代码不会包含在页面上。 enter image description here

然后我不得不更改我的d.ts文件以全局声明Sfdc对象。 enter image description here

1 个答案:

答案 0 :(得分:1)

鉴于该模块实际上不是一个模块(它是一个暴露的全局对象),您需要自定义类型匹配。

而不是declare module '@salesforce/canvas-js-sdk'尝试撰写declare namespace Sfdc

然后,您应该可以删除导入语句并直接从代码中的任何位置访问全局Sfdc变量。