如何使用 libman 而不是 npm 来下载 typescript 定义
How to use libman instead of npm to download typescript definitions
当我使用 npm 安装 typescript 定义时,我可以在属于 Visual Studio build:
的 typescript 文件中使用它们
- 在 Visual Studio
中创建新的 ASP.NET 核心 Web 应用程序
- 使用 libman
添加 jQuery
- 使用
npm install @types/jQuery
添加 jQuery
- 创建新的打字稿文件:wwwroot/js/site.ts。这会将
<TypeScriptCompile Include="wwwroot\js\site.ts" />
添加到 .csproj。
- 我现在可以在我的打字稿文件中使用
$
全局变量
但是,当我使用 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.ts
和 site.d.ts
放在同一文件夹下。结果,只加载了 site.ts
文件。
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
。两者对我来说都完美无缺。
当我使用 npm 安装 typescript 定义时,我可以在属于 Visual Studio build:
的 typescript 文件中使用它们- 在 Visual Studio 中创建新的 ASP.NET 核心 Web 应用程序
- 使用 libman 添加 jQuery
- 使用
npm install @types/jQuery
添加 jQuery
- 创建新的打字稿文件:wwwroot/js/site.ts。这会将
<TypeScriptCompile Include="wwwroot\js\site.ts" />
添加到 .csproj。 - 我现在可以在我的打字稿文件中使用
$
全局变量
但是,当我使用 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(感谢 popper.js 是 bootstrap 4 的依赖项。这有点棘手,因为 幸运的是,popper.js 包含 typescript 定义(索引。d.ts),我只需要告诉 typescript 编译器在哪里查看它。{
"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" ]
}
@types/bootstrap
依赖于 popper.js
而不是 @types/popper.js
(这是不兼容的并会在 @types/bootstrap/index.d.ts);
我想原因是您将 site.ts
和 site.d.ts
放在同一文件夹下。结果,只加载了 site.ts
文件。
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
。两者对我来说都完美无缺。