尝试使用chart.js时“找不到名称Chart”

问题描述 投票:0回答:1

我有一个非常烦人的图表js问题,我已经被困了好几天了,我已经尝试了几乎所有的方法,但还无法弄清楚。

问题是,我使用的是一个简单的 TypeScript 环境,其中包含 ES 模块,我尝试导入 Chart 但没有成功,它给了我以下错误:

Uncaught TypeError: Failed to resolve module specifier "@kurkle/color". Relative references must start with either "/", "./", or "../".

我在互联网上搜索,发现没有一个实用的解决方案,我应该诉诸另一种方法,所以我这样做了,即使用全局UMD链接,所以我确实将脚本导入到我的html中:

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js"></script>

但现在还有另一个问题:当我尝试使用新图表时,出现此错误,说找不到图表:

Cannot find name 'Chart'.ts(2304)

我真的没有选择,我希望有人能帮助我。

这是我的package.json:

{
  "dependencies": {
    "moment": "^2.30.1",
    "tsconfig-paths": "^4.2.0",
    "typescript": "^5.4.5"
  },
  "devDependencies": {
    "tsc-watch": "^6.2.0"
  }
}

这是我的 tsconfig.json:

{
  "compilerOptions": {
    "strict": true,
    "esModuleInterop": true,
    "module": "ESNext",
    "target": "ES2022",
    "outDir": "dist",
    "rootDirs": ["**/*", "src"],
    
  },
  "include": ["src/"]
}

这是在新图表上导致错误的文件,请记住,我已经尝试过导入但没有成功,它在浏览器上给出了错误:

import { diagnosisHistoryProps } from './patientsData.js';

function chartData(diagnosis_history: diagnosisHistoryProps) {
  const bloodPressureHTML = <HTMLCanvasElement>(
    document.getElementById('blood-pressure')
  );

  if (bloodPressureHTML) {
    new Chart(bloodPressureHTML, {
      type: 'line',
      data: {
        labels: diagnosis_history.map((row) => row.year),
        datasets: [
          {
            label: 'Blood Pressure',
            data: diagnosis_history.map(
              (row) => row.blood_pressure.diastolic.value
            ),
          },
        ],
      },
    });
  }
}

export default chartData;

我已经尝试了一切,并到处搜索,但不幸的是还没有运气。

javascript html typescript chart.js
1个回答
0
投票

您可以忽略运行

new Chart()
的行。您可以添加一个 typescriptignore:

  if (bloodPressureHTML) {
    //@ts-ignore
    new Chart(bloodPressureHTML, {
      type: 'line',

这将阻止打字稿解析该行的类型。您将无法获得正确的类型注释,因为将假定返回

new Chart()
类型。您需要自行转换它或将其保存到已定义类型的变量中。但是,这将允许您的代码进行编译。之后,只要您的
any
中有脚本标签来加载库,那么它应该可以在浏览器中正常工作。
如果您需要类型注释,就会出现问题。您需要让库正常工作,或者只导入通常是 

<head>

的类型定义,但我相信这些通常也需要库本身。

    

© www.soinside.com 2019 - 2024. All rights reserved.