chartjs / Chart.js

Simple HTML5 Charts using the <canvas> tag
https://www.chartjs.org/
MIT License
63.94k stars 11.89k forks source link

TypeScript: Plugin interface doesn't accept TData and TLabel generic arguments from Chart #11678

Open tomas-light opened 4 months ago

tomas-light commented 4 months ago

Expected behavior

export interface Plugin<TType extends ChartType = ChartType, TData = DefaultDataPoint<TDefaultType>, TLabel = unknown, O = AnyObject> extends ExtendedPlugin<TType, O> {
  afterDatasetsDraw?(chart: Chart<TType, TData, TLabel>, args: EmptyObject, options: O, cancelable: false): void;
}

Current behavior

export interface Plugin<TType extends ChartType = ChartType, O = AnyObject> extends ExtendedPlugin<TType, O> {
  afterDatasetsDraw?(chart: Chart<TType>, args: EmptyObject, options: O, cancelable: false): void;
}

Reproducible sample

https://www.typescriptlang.org/play?#code/JYWwDg9gTgLgBAbzgYQBYENYBoUdgEXRnQGcBTGHABQBsBXAc2ADs4BfOAMyghDgHIAxnhgA6AFYl+AbgCwAKAUwAnmDJwAsssLE4AXjhQy6ACYRmNZXADazOiABGZKDhIwoLBgF05i+YPM3OBBtIlIKAC5cTBgdcJgAHn4zRlQ7GH4cLTiAPn1EBTg4EzCo6wBGACYAZhx+TggIfi8FNl8FAOYgkNpGFijepmYklIY0ugy8gwRCuAB6ObhUZ3VgEjh0OBU1ODWSOjIcJ0F0OnI4QZZZ9E4YZzjyWKh0AHcogAphGKi0GJGIVLpTKaULEHIASn0eRm8iKRU6QWsgjoUCMzFiYUeJC8+S+sFEJWIBMxFBIvjhcAR8GsIQAcvYnC5gsoAMruTw4gzI1FkdEPUnE4jk9itXxAA

Optional extra steps/info to reproduce

import { Chart, ChartDataset, Plugin } from 'chart.js';

type MyData = readonly [number, string];

const myDataset: ChartDataset<'doughnut', MyData> = {
  data: [123, 'foo']
};

const myPlugin: Plugin<'doughnut'> = {
  // here is a type issue, because of Plugin doesn't accept TData
  afterDatasetDraw: (chart: Chart<'doughnut', MyData>) => {
    const [currentDatasets] = chart.data.datasets;
    const [myNumber, myString] = currentDatasets.data;
  }
};

Possible solution

apply suggestion from Expected behavior above

Context

No response

chart.js version

4.4.1

Browser name and version

No response

Link to your project

No response