如何使用 libman 而不是 npm 来下载 typescript 定义

How to use libman instead of npm to download typescript definitions

当我使用 npm 安装 typescript 定义时,我可以在属于 Visual Studio build:

的 typescript 文件中使用它们
  1. 在 Visual Studio
  2. 中创建新的 ASP.NET 核心 Web 应用程序
  3. 使用 libman
  4. 添加 jQuery
  5. 使用 npm install @types/jQuery
  6. 添加 jQuery
  7. 创建新的打字稿文件:wwwroot/js/site.ts。这会将 <TypeScriptCompile Include="wwwroot\js\site.ts" /> 添加到 .csproj。
  8. 我现在可以在我的打字稿文件中使用 $ 全局变量

但是,当我使用 libman 下载 typescript 定义时,我无法配置 typescript 构建以使用它们。

我想我需要添加 tsconfig.json,但它似乎干扰了 csproj 中的 TypeScriptCompile。

wwwroot
  js
    site.d.ts
    site.ts
  lib
    jquery
       jquery.min.js
    @types
       jquery
         index.d.ts
         misc.d.ts
         …
MyProject.csproj
libman.json

如何修改项目 (.csproj, tsconfig.json) 以便使用 wwwroot\lib\@types 而不是 node_modules/ 中的定义文件和全局变量@types?

我创建了 tsconfig.json 并设置了

  "compilerOptions": {
    "typeRoots": [ "wwwroot/lib/@types" ]
  }

但现在构建 returns 错误,例如 site.ts 中的 "Cannot find name MyInterface"。 MyInterface 在 site.d.ts 中定义。为什么在没有 tsconfig.json 时可以识别该类型,而现在却不能?我想避免添加 ///<reference> 条评论

编辑:

我最终将 site.d.ts 重命名为 global.d.ts(感谢 ),并在 tsconfig:[=21] 中显式设置 popper.js 模块的路径=]

{
  "compileOnSave": true,
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "popper.js": [ "wwwroot/lib/popper.js" ] //use this instead of wwwroot/lib/@types/popper.js which is incompatible
    },
    "typeRoots": [ "wwwroot/lib/@types" ]
  },
  "include": [ "wwwroot/js/**/*.ts" ]
}

popper.js 是 bootstrap 4 的依赖项。这有点棘手,因为 @types/bootstrap 依赖于 popper.js 而不是 @types/popper.js(这是不兼容的并会在 @types/bootstrap/index.d.ts);

中抛出打字稿错误

幸运的是,popper.js 包含 typescript 定义(索引。d.ts),我只需要告诉 typescript 编译器在哪里查看它。

我想原因是您将 site.tssite.d.ts 放在同一文件夹下。结果,只加载了 site.ts 文件。

discussion here

The resolution process always favors the .ts files over .d.ts. the rational here is that a .d.ts file can be generated from the .ts file, so the .ts file is a more up-to-date version of the truth

将您的 site.d.ts 移动到其他文件夹,或将其重命名为 site.global.d.ts。两者对我来说都完美无缺。