【问题标题】:Cannot find type definition file for 'jquery'找不到“jquery”的类型定义文件
【发布时间】:2017-06-18 18:44:35
【问题描述】:

我刚刚在 NuGet 中运行了更新来更新我的包。之后,我无法再编译并收到上述错误。

jquery 定义文件在我的项目中。但是由于某种原因,引导定义文件再也找不到了。

自从我从事这个项目以来已经有一段时间了。我很确定在更新之前我的定义文件位于完全不同的目录中。但是大部分代码和文件结构都是由 Visual Studio NuGet 包自动创建的。

这些链接或参考位于何处以便可以正确找到定义文件?我对 TypeScript 很陌生,所以如果您能详细解释或提供进一步阅读的链接,将不胜感激


编辑:

我发现这些被称为Triple-Slash Directives。但是这些页面并没有告诉我足够的信息来理解这个错误。

它告诉我 <reference types="..."/> 应该用于 @types 包,我相信 .d.ts 文件就是这样。我尝试将jquery.d.ts 的名称更改为index.d.ts。我已经尝试包括整个路径,例如../jquery/jquery.d.ts。这些都不起作用。

最后,我在angular.d.ts找到了下面这行:

/// <reference path="../jquery/jquery.d.ts" />

我将它复制到引导程序 index.d.ts 中,这似乎修复了错误。

但这对我来说没有意义。首先,我试图链接到定义文件,而不是 TypeScript 文件。所以根据上面的文章,我应该使用reference types,而不是reference path。但是reference types 不起作用。我在这里错过了什么?

文章还说:

仅当您手动创作 d.ts 文件时才使用这些指令。

这些文件不是我写的。它们来自 NuGet,看起来是自动生成的。那么为什么我需要改变这个呢?

【问题讨论】:

标签: jquery twitter-bootstrap visual-studio typescript nuget-package


【解决方案1】:

它们来自 NuGet,看起来是自动生成的。

不要将 nuget 用于类型定义。 NPM是要走的路。

npm install @types/jquery -D 

然后你可以:

<reference types="jquery"/>

欢迎来到未来?

【讨论】:

  • “不要使用 nuget 进行类型定义。NPM 是要走的路。” - 我怀念 Visual Studio 中的 TypeScript “刚刚工作”的日子,我不需要单独(和手动)下载和安装 node、npm 和 typings。如果 VS 和 TypeScript 工具链能告诉我该怎么做,我不会太介意——自从 TypeScript 2.0 发布以来,学习曲线已经变得相当陡峭,而且体验变得越来越不适合初学者。
  • 投了反对票,因为虽然该建议可能有效,但它实际上并没有回答“那么我为什么需要更改它?”的问题
【解决方案2】:

我发现在安装 @types/jquery 后将 jquery.slim.d.ts 中的 /// &lt;reference types="jquery" /&gt; 更改为 /// &lt;reference path="../JQuery.d.ts" /&gt; 为我解决了这个问题。

【讨论】:

    【解决方案3】:

    一个选项是将 tsconfig.json 上的属性 typeRoots 设置为实际包含定义文件的文件夹的路径,如果您使用 Nuget 和 DefinitiveTyped,它应该是 Scripts 文件夹内的 typings 文件夹。因此:

    {
      "compilerOptions": {
        "typeRoots": [
          "./Scripts/typings"
        ]
      }
    }
    

    basarat 发布的是正确的 2020 年继续进行的方式,但也许您正在从事一个遗留项目,目前无法迁移到 NPM。

    【讨论】:

      【解决方案4】:

      希望在 Angular 项目中遇到此错误时提供更新的答案。运行单元测试时出现错误,我的问题是在我的tsconfig.json 中,我将 jQuery 类型列为:

      {
        "compilerOptions": {
          ...,
          "types": [
            "node, jQuery"
          ]
        }
      }
      

      我的解决方法是全部使用小写:

      {
        "compilerOptions": {
          ...,
          "types": [
            "node, jquery"
          ]
        }
      }
      

      【讨论】:

        【解决方案5】:

        如果 Web 项目正在使用libman,请右键单击 libman.json 并单击“Restore Client-Side Libraries”。

        【讨论】:

          猜你喜欢
          • 2018-07-20
          • 2021-08-15
          • 2018-07-31
          • 1970-01-01
          • 2022-11-03
          • 2019-05-15
          • 2017-03-13
          • 2017-06-09
          • 1970-01-01
          相关资源
          最近更新 更多