找不到“jquery”的类型定义文件。

33

我刚刚在NuGet中运行了更新以更新我的包。之后,我不能再编译,我收到上面的错误。

jquery定义文件在我的项目中。但出于某种原因,bootstrap定义文件无法找到它。

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

这些链接或引用位于哪里,以便可以正确地找到定义文件?我对TypeScript非常陌生,所以如果您可以详细解释或提供进一步阅读的链接,将不胜感激

code and error

file tree


编辑:

我发现这些被称为三斜杠指令。但是该页面没有告诉我足够理解此错误的信息。

它告诉我应该使用<reference types="..."/>用于@types包,这就是我认为.d.ts文件的目的。我尝试将jquery.d.ts的名称更改为index.d.ts。我还尝试包括整个路径,例如../jquery/jquery.d.ts。这两个都没有起作用。

最后,我在angular.d.ts中找到了以下行:

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

我将其复制到 bootstrap 的 index.d.ts, 然后似乎问题就解决了。

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

该文章还说:

只有在手动编写 d.ts 文件时才使用这些指令。

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


2
我在使用 .net mvc 和 typescript 开始新项目后遇到了同样的问题。目前我已将 bootstrap DTS 回退到版本 0.9.0。在这个版本中,bootstrap 类型定义看起来像 jquery 类型定义(http://joxi.ru/MAjMJbEU4o36K2)。 - Dmitry Bykadorov
我正在尝试使用tsconfig.json文件并设置typeRoot,但没有成功。https://www.typescriptlang.org/docs/handbook/tsconfig-json.html - David De Sloovere
5个回答

20

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

不要使用NuGet进行类型定义。使用NPM更好。

npm install @types/jquery -D 

然后你可以:

<reference types="jquery"/>

欢迎来到未来


27
不要使用NuGet来获取类型定义,NPM是更好的选择。我很怀念在Visual Studio中使用TypeScript“只需运行”而不需要单独(手动)下载和安装node、npm和typings的日子。如果VS和TypeScript工具链能告诉我该做什么,我就不会那么介意-自从TypeScript 2.0发布以来,学习曲线变得陡峭了很多,体验也变得更加不友好。 - Dai
9
因为虽然该建议可能有效,但它并没有实际回答“我为什么需要更改这个”的问题而被投了反对票。 - joelmdev

2

我发现在安装 @types/jquery 后,将 /// <reference types="jquery" /> 更改为 /// <reference path="../JQuery.d.ts" /> 在 jquery.slim.d.ts 中可以解决这个问题。


0
如果你的Web项目使用了libman,右键点击libman.json并点击“还原客户端库”。

0

当作为 Angular 项目的一部分运行单元测试时,想要提供一个更新的答案来解决此错误。我遇到了这个错误,我的问题在于在我的 tsconfig.json 中将 jQuery 类型列出为:

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

我的解决方法是使用全部小写字母:
{
  "compilerOptions": {
    ...,
    "types": [
      "node, jquery"
    ]
  }
}

0

一种选择是在您的tsconfig.json上设置属性typeRoots(如果您的项目还没有它,则需要创建一个),将其设置为包含定义文件的文件夹的实际路径,如果您正在使用Nuget和DefinitelyTyped,则应该是Scripts文件夹中的typings文件夹。因此:

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

Basarat所发表的是正确的2020年进行的方式,但也许你正在处理一个传统项目,在这种情况下,现在迁移到NPM并不是一个选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接