如何使用libman代替npm下载打字稿定义

时间:2018-11-29 10:15:41

标签: visual-studio typescript asp.net-core libman

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

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

但是,当我使用libman下载打字稿定义时,我很难配置打字稿版本以使用它们。

我想我需要添加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且现在没有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是引导程序4的依赖项。这有点棘手,因为@types/bootstrap依赖于popper.js而不是@types/popper.js(这是不兼容的,会在@types中引发打字错误) /bootstrap/index.d.ts);

幸运的是,popper.js包含打字稿定义(index.d.ts),我只需要告诉打字稿编译器在哪里查看它即可。

1 个答案:

答案 0 :(得分:0)

我想原因是您在同一文件夹中有site.tssite.d.ts。结果,仅加载了site.ts文件。

请参见discussion here

  

与.d.ts相比,解析过程始终偏爱.ts文件。这样做的合理性是可以从.ts文件生成.d.ts文件,因此.ts文件是真相的最新版本

site.d.ts移动到其他文件夹,或将其重命名为site.global.d.ts。两者都为我完美地工作。