我有一个非常烦人的图表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;
我已经尝试了一切,并到处搜索,但不幸的是还没有运气。
您可以忽略运行
new Chart()
的行。您可以添加一个 typescriptignore:
if (bloodPressureHTML) {
//@ts-ignore
new Chart(bloodPressureHTML, {
type: 'line',
这将阻止打字稿解析该行的类型。您将无法获得正确的类型注释,因为将假定返回
new Chart()
类型。您需要自行转换它或将其保存到已定义类型的变量中。但是,这将允许您的代码进行编译。之后,只要您的 any
中有脚本标签来加载库,那么它应该可以在浏览器中正常工作。如果您需要类型注释,就会出现问题。您需要让库正常工作,或者只导入通常是 <head>
的类型定义,但我相信这些通常也需要库本身。