Javascript 没有定义的npm包的Typescript导入

Javascript 没有定义的npm包的Typescript导入,javascript,typescript,Javascript,Typescript,我有一个npm包(@salesforce/canvas js sdk),它没有类型脚本定义文件。我使用React,所以我使用“importfrom”语法来引入依赖关系。VisualStudio似乎不喜欢模块没有定义文件。此外,该模块应该公开名为Sfdc的“窗口”对象的属性。如何在不修改包的情况下定义此npm包的定义文件 我一直在尝试: 这就是我当前的导入语句的样子 然后我为模块定义了一个非常简单的定义,如下所示 这解决了无法找到模块定义的编译错误。但是,如果我尝试使用示例中的Sfdc对象,

我有一个npm包(@salesforce/canvas js sdk),它没有类型脚本定义文件。我使用React,所以我使用“importfrom”语法来引入依赖关系。VisualStudio似乎不喜欢模块没有定义文件。此外,该模块应该公开名为Sfdc的“窗口”对象的属性。如何在不修改包的情况下定义此npm包的定义文件


我一直在尝试:

这就是我当前的导入语句的样子

然后我为模块定义了一个非常简单的定义,如下所示

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

下面是文档中关于如何使用纯JavaScript库的图片。

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

解决方案 因为包是建立在全局对象上的,所以我需要简化import语句。我不能仅仅排除导入,因为页面上不会包含包代码。

然后,我必须更改我的d.ts文件以全局声明Sfdc对象。

如果模块实际上不是一个模块(它是一个暴露的全局对象),您将希望自定义键入与此匹配

尝试编写
声明名称空间Sfdc
,而不是
声明模块'@salesforce/canvas js sdk'


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

鉴于该模块实际上不是一个模块(它是一个公开的全局对象),您将希望自定义键入与之匹配

尝试编写
声明名称空间Sfdc
,而不是
声明模块'@salesforce/canvas js sdk'


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

只要我没有执行“declare module'@salesforce/canvas js sdk'”,那么我就会得到导入语句上的错误。找不到模块“@salesforce/canvas js sdk”的声明文件C:/code/AzureServices/SFDCWebsite2/node_modules/@salesforce/canvas js sdk/js/canvas all.js'隐式具有“any”类型。声明命名空间时,您不再需要使用导入语句。Import语句适用于需要从模块导入的情况。但是包是作为一个全局对象而不是模块构建的,因此import语句毫无意义。只需删除您对该软件包的导入说明。谢谢,我仍然需要导入,但这个答案将我引向了正确的方向。我在问题的底部发布了关于我的解决方案的更多详细信息。只要我没有执行“declare module'@salesforce/canvas js sdk',我就会在import语句中得到错误。找不到模块“@salesforce/canvas js sdk”的声明文件C:/code/AzureServices/SFDCWebsite2/node_modules/@salesforce/canvas js sdk/js/canvas all.js'隐式具有“any”类型。声明命名空间时,您不再需要使用导入语句。Import语句适用于需要从模块导入的情况。但是包是作为一个全局对象而不是模块构建的,因此import语句毫无意义。只需删除您对该软件包的导入说明。谢谢,我仍然需要导入,但这个答案将我引向了正确的方向。我在问题的底部贴出了关于我的解决方案的更多细节。