6

当我使用 npm 安装 typescript 定义时,我可以在属于 Visual Studio 构建的 typescript 文件中使用它们:

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

但是,当我使用 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" ]
  }

但现在构建在 site.ts 中返回诸如“找不到名称 MyInterface”之类的错误。MyInterface 在 site.d.ts 中定义。为什么在没有 tsconfig.json 时可以识别类型,而现在却没有?我想避免添加///<reference>评论

编辑:

我最终将 site.d.ts 重命名为 global.d.ts (感谢@itminus answer),并在 tsconfig 中明确设置 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 定义(index.d.ts),我只需要告诉 typescript 编译器在哪里查看它。

4

1 回答 1

0

我想原因是你在同一个文件夹下有site.tsand 。site.d.ts结果,只有site.ts文件被加载。

请参阅此处的讨论

解析过程总是倾向于 .ts 文件而不是 .d.ts。这里的理由是可以从 .ts 文件生成 .d.ts 文件,因此 .ts 文件是事实的更新版本

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

于 2018-11-30T03:16:16.457 回答