在 ASP.NET Core 应用程序中编译打字稿时如何包含引导表的类型

Posted

技术标签:

【中文标题】在 ASP.NET Core 应用程序中编译打字稿时如何包含引导表的类型【英文标题】:how to include types for bootstrap-table when compiling typescript in an ASP.NET Core app 【发布时间】:2021-10-06 21:20:22 【问题描述】:

我正在编写一个 ASP.NET Core 5 应用程序,而不是使用 JS,我想使用 TypeScript。

我正在使用一些 JS 库,所以为了让 TS 编译它需要为它们定义。

我已经使用库的类型定义的 devDependencies 设置了 NPM,它将它们下载到 node_modules,TS 编译器会找到并使用它们。

我的 NPM package.json 是:


    "version": "1.0.0",
    "name": "asp.net",
    "private": true,
    "devDependencies": 
        "@types/bootstrap": "5.0.17",
        "@types/jquery": "3.5.6",
        "bootstrap-table": "^1.18.3",
        "jquery": "3.6.0"
    

我的tsconfig.json 是:


    "compilerOptions": 
        "noImplicitAny": true,
        "noEmitOnError": true,
        "removeComments": true,
        "sourceMap": true,
        "target": "es5",
        "lib": [
            "DOM",
            "ES5",
            "ES2015"
        ]
    ,
    "include": [
        "wwwroot/js/**/*.ts"
    ],
    "exclude": [
        "node_modules"
    ],
    "compileOnSave": true

这适用于 JQuery 和 Bootstrap,但不适用于 bootstrap-table。

我的项目结构是:

root
  wwwroot
    js
      home.ts
  views
    home
      index.cshtml      // imports ~/js/home.js
  node_modules          // the folders in here are automatically maintained by NPM
    @types
      bootstrap
      jquery
    bootstrap-table
  package.json
  tsconfig.json

编译home.ts时的错误是(TS) Property 'bootstrapTable' does not exist on type 'JQuery<HTMLElement>'.

我认为问题可能是由于 bootstrap-table 的类型定义包含在主库中,这意味着它不在 node_modules 的 @types 子目录中。

我尝试通过手动指定 typeRoots 来强制 TS 编译器查看它,但只有很多编译错误,因为它开始将所有子文件夹视为缺少的模块。

【问题讨论】:

【参考方案1】:

是的,如果你只是想使用 bootstrap-table 插件,你可以使用 add -client 库直接下载插件:

或者直接使用CDNjs节点:

https://cdnjs.com/libraries/bootstrap-table

【讨论】:

下载库和类型定义,但不解决让 TS 编译器查看库文件夹中的定义

以上是关于在 ASP.NET Core 应用程序中编译打字稿时如何包含引导表的类型的主要内容,如果未能解决你的问题,请参考以下文章

VS 2015 ASP.NET 4 MVC 5 中的打字稿 - 设置和选择的工作组合是啥?

如何在 Web 应用程序(ASP.NET Core)中使用 TypeScript 导入语句而不是 <reference path...>?

离子打字稿错误

无法在 Docker 中编译打字稿

打字稿在编译时减去两个数字

为啥打字稿编译器在生成的 javascript 中省略了“should.js”导入?