typescript - Chart.js 3.x 自定义定位器:不能在 TypeScript 中使用它们
问题描述
我正在使用ChartJS v3
并且正在尝试实现自定义工具提示定位器,如文档中所述:
https://www.chartjs.org/docs/master/configuration/tooltip.html#position-modes
然而,问题是我正在编码TypeScript
并且类型检查正在与我作斗争。第一个问题是我无法像示例中那样定义自定义定位器:
const tooltipPlugin = Chart.registry.getPlugin('tooltip');
tooltipPlugin.positioners.myCustomPositioner = ...
因为返回的类型getPlugin()
不包含该positioners
属性。
第二个问题是当您必须配置插件时。我不能做到这一点:
plugins: {
tooltip: {
position: 'myCustomPositioner',
...
}
}
因为该position
属性仅接受内置值('average'
和'nearest'
)的默认值,但不接受自定义字符串。
我该如何解决这个问题?我很高兴最新的 ChartJS 提供了强大的类型,但是如果使库的核心功能无法使用,它们就没有用了……我错过了什么?
解决方案
正确的方法是扩展定位器映射类型以包含您的自定义函数。参考https://www.chartjs.org/docs/3.4.1/developers/charts.html,其中包括如何扩展自定义图表的类型,与此类似。
通过将位置转换为@Master_T 的解决方案,您就是在欺骗编译器。当您创建定位器时,该解决方案也不能解决问题。
注意:这需要您使用 ChartJS 3.x
chartjs.d.ts
在项目中的某处创建一个名为的文件tsconfig.json
,例如@types/chartjs.d.ts
import type { TooltipPositionerFunction } from 'chart.js';
declare module 'chart.js' {
// Extend tooltip positioner map
interface TooltipPositionerMap {
cursor: TooltipPositionerFunction<ChartType>;
}
}
然后,在注册组件的位置创建函数:
import { Tooltip } from 'chart.js'
// Create positioner to put tooltip at cursor position
Tooltip.positioners.cursor = function (chartElements, coordinates) {
return coordinates;
};
现在您可以将光标用作position
工具提示的属性。
推荐阅读
- c - 为什么我们使用点/箭头运算符来访问 c 中的结构变量
- java - Spring引导一对多加入从数据库中获取重复的json
- amazon-web-services - 如何删除已删除资源上的标记(取消标记)
- node.js - 与 app.use 相比,ExpressJS 路由器获得不同的请求参数
- javascript - 可以让cheerio提取标签
- typescript - 如何在字符串检查 TypeScript 类方法中有条件地提示布尔返回类型?
- c++ - 如何从向量中找到唯一的单词并将它们放入另一个向量中?
- reactjs - File Preview in React FilePond not showing up when setting initial file
- javascript - C# Owin handle 401 access token errors and regenerate access tokens using refresh token
- html - Flex items not wrapping with flex-wrap: wrap applied