【问题标题】:Typescript, Angular CLI, NPM, VS Code: Property <property> does not exist on type 'jQueryStatic<HTMLElement>'Typescript、Angular CLI、NPM、VS Code:“jQueryStatic<HTMLElement>”类型上不存在属性 <property>
【发布时间】:2018-01-01 08:48:45
【问题描述】:

场景

我在我的单页应用中使用 AngularAngular CLINPMTypescript。 p>

在我的一个组件中,我需要使用 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 的已安装类型定义。

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

问题

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

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


可能的原因

我最好的选择是,这与我系统上全局安装的 TS 版本与 VS Code IDE 中的 typescript 的差异有关,因为在检查 VSCode 中右下角状态栏中的 TS 版本时IDE 说 2.4.2.

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

任何想法,任何人?

【问题讨论】:

  • 在您的屏幕截图中,您的当前目录可能在tsc 上有旧版本。尝试在其他地方运行tsc。如果不从 PATH 环境变量中删除屏幕截图中的目录。
  • 至于您的实际问题,您是否安装了typings (@types/jquery-backstretch)?你的tsconfig.json 是什么样的?
  • 谢谢你,Saravana,我一回家就试试。是的,我确实为 jQuery 和 backstretch 安装了类型。我会尽快更新我的问题,提供更多显示其他设置的屏幕截图。
  • 我更新并添加了我承诺的截图。我现在正在调查是否可能需要安装正确版本的 backstretch 插件及其类型定义。

标签: angular typescript angular-cli


【解决方案1】:

更新 NPM

npm install npm@latest -g

更新打字稿

npm -g upgrade typescript

npm install typescript@latest -g

【讨论】:

  • 谢谢拉胡尔。我会尽快尝试并通知您。
  • 修复 node.js 对我有用。只有这样你建议的命令才有效。现在 VS Code 的状态栏和控制台都显示相同的 typescript 版本。但是,这还没有解决我原来的问题。我怀疑我的问题是 backstretch jquery 插件及其类型定义版本不匹配。但这是一个疯狂的猜测,所以现在正在调查这个。请参阅上面添加的屏幕截图。
【解决方案2】:

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

1.确保系统上安装了最新版本的 Node JS

2。在控制台中运行“npm install typescript@latest -g”

3.在控制台中运行“tsc -v”以显示 TypeScript 版本

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

4.在您的 Angular 应用程序中创建一个名为“typings”的文件夹,并在该文件夹中创建一个名为“.d.ts”的文件(在我们的例子中为“backstretch.d.ts”)。

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

6.在控制台中运行“ng serve”,它应该可以正确构建

完成!


关于上述解决方案的附加说明

  • 我仍然不确定为什么 node_modules/@types/jquery-backstretch 下安装的类型无法识别,并且在运行 ng serve 时无法编译
  • 如果打字文件放在应用程序下,但如上面第 5 点所述,打字被识别并且一切都按预期工作
  • npm 应该安装在 "C:\Users\ \AppData\Roaming\npm" 下,其中 "AppData" 可能是一个隐藏文件夹(请参阅here 如何显示隐藏文件夹)
  • typescript 应该安装在 ""C:\Users\ \AppData\Roaming\npm\node_modules\typescript"" 下

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 2018-06-08
    • 2017-12-15
    • 2021-02-06
    • 2017-07-18
    • 2022-01-13
    • 2021-12-15
    • 2019-09-16
    相关资源
    最近更新 更多