打字稿,角度CLI,NPM,VS代码:属性<property>在'jQueryStatic <htmlelement>'

时间:2017-07-26 07:18:29

标签: angular typescript angular-cli

方案

我在单页应用中使用 Angular Angular CLI NPM Typescript

在我的一个组件中,我需要使用 jQuery 来初始化 jQuery 插件。在我的例子中,插件是backstretch,但这不是那么相关,因为下面描述的问题对于任何jQuery插件都是相同的。

是的,我知道你们有些人会说,Angular和jQuery在一起 - 不是最好的主意。但事实是可重复使用的jQuery插件在Angular应用程序中仍然非常有用。

问题

尽管在VS Code IDE中编写代码时,IntelliSense下拉列表正确显示了jQuery和backstretch的属性,但似乎没有任何错误,运行“ng serve”时会出现问题,因此当TypeScript编译成JavaScript时。

我在控制台中遇到的错误是:

  

错误   C:/wamp/www/PaperbackComingSoon/Angular/my-app/src/app/app.component.ts   (20,7):属性'backstretch'在类型上不存在   'JQueryStatic'。

在下面的屏幕截图中,您可以看到此错误,还可以看到jsconfig.json文件以及jQuery和Backstretch的已安装类型定义。

enter image description here

虽然编译器似乎找到了jQuery,但由于某些奇怪的原因,它有找到后伸的问题。您可以在下面看到backstretch的实际类型定义。

enter image description here

问题

我错过了什么?有没有人知道这里有什么问题?我的Backstretch插件的类型定义文件是否可能不是实际jQuery Backstretch插件的正确版本?

由于我当然正在使用TypeScript,因此我希望所有具有可用于我的类型的输入文件的jQuery插件都是强类型的。如果某个jQuery插件的输入确实可用,我认为没有理由不使用此功能。我知道我可以通过自己定义输入并制作所有类型为“any”的jQuery插件来轻松修复我的编译问题,但这不是我想要的,它似乎不对。我想利用任何打字文件。我没有看到任何原因,只是因为编译器似乎没有找到已定义的属性。

可能的原因

我最好的选择是,这与我的系统上全局安装的TS版本与VS Code IDE中的打字稿之间的差异有关,因为在VSCode中检查右侧底部状态栏中的TS版本时IDE说 2.4.2。

enter image description here

但是如果我在控制台中运行“tsc -v”,它会给我 1.0.3.0 (请注意我之前使用的是Visual Studio)。但即使在我运行“npm install -g typescript@2.4.2之后,这也没有改变任何东西。

enter image description here

任何想法,任何人?

2 个答案:

答案 0 :(得分:1)

更新NPM

npm install npm@latest -g

更新打字稿

npm -g upgrade typescript

npm install typescript@latest -g

答案 1 :(得分:0)

我终于找到了解决方案。请按照以下步骤操作。

<强> 1。确保在系统上安装了最新版本的Node JS

<强> 2。在控制台中运行&#34; npm install typescript @ latest -g&#34;

第3。在控制台运行&#34; tsc -v&#34;显示TypeScript版本

  • 检查此版本是否确实是最新版本,并且与VSCode状态栏中的版本匹配:

enter image description here

<强> 4。在角度应用中创建一个名为&#34; typings&#34;的文件夹。并在该文件夹中创建一个名为&#34;&lt;插件名称&gt; .d.ts&#34; (&#34; backstretch.d.ts&#34;在我们的例子中)。

enter image description here

<强> 5。转到typings site (in this case "Backstretch"),复制.d.ts文件的内容并将其粘贴到上面创建的文件中并保存文件。

<强> 6。运行&#34; ng serve&#34;在控制台中它应该正确构建

DONE!

关于上述解决方案的其他说明

  • 我仍然不确定为什么无法识别node_modules / @ types / jquery-backstretch下的已安装类型,并且在运行ng服务时无法编译
  • 如果打字文件放在应用程序下但是,如上面第5点所述,输入被识别并且一切都按预期工作
  • npm应安装在&#34; C:\ Users \&lt;用户名&gt; \应用程序数据\漫游\ NPM&#34;其中&#34; AppData&#34;可能是隐藏文件夹(请参阅here如何显示隐藏文件夹)
  • typescript应安装在&#34;&#34; C:\ Users \&lt;用户名&gt; \应用程序数据\漫游\ NPM \ node_modules \打字稿&#34;&#34;