Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose TParsedData at top level of types #8499

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 25 additions & 26 deletions types/index.esm.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export {
ScriptableAndArrayOptions
} from './scriptable';

export interface ScriptableContext<TParsedData> {
export interface ScriptableContext<TParsedData extends unknown> {
active: boolean;
chart: Chart;
dataIndex: number;
Expand Down Expand Up @@ -443,7 +443,7 @@ export interface ActiveElement extends ActiveDataPoint {
export declare class Chart<
TType extends ChartType = ChartType,
TData extends unknown[] = DefaultDataPoint<TType>,
TLabel = unknown
TLabel = unknown,
> {
readonly platform: BasePlatform;
readonly id: string;
Expand Down Expand Up @@ -534,7 +534,7 @@ export type UpdateMode = keyof typeof UpdateModeEnum;
export class DatasetController<
TElement extends Element = Element,
TDatasetElement extends Element = Element,
TParsedData = unknown,
TParsedData extends unknown = unknown,
> {
constructor(chart: Chart, datasetIndex: number);

Expand Down Expand Up @@ -748,7 +748,7 @@ export const layouts: {
};

// TParsedData defaults to unknown here since plugins can work for any chart type
export interface Plugin<TParsedData = unknown, O = AnyObject> extends ExtendedPlugin<TParsedData> {
export interface Plugin<TParsedData extends unknown = unknown, O = AnyObject> extends ExtendedPlugin<TParsedData> {
id: string;

/**
Expand Down Expand Up @@ -1353,7 +1353,7 @@ export interface HoverInteractionOptions extends CoreInteractionOptions {
onHover(event: ChartEvent, elements: ActiveElement[], chart: Chart): void;
}

export interface CoreChartOptions<TParsedData> extends ParsingOptions, AnimationOptions<TParsedData> {
export interface CoreChartOptions<TParsedData extends unknown> extends ParsingOptions, AnimationOptions<TParsedData> {

datasets: AnimationOptions<TParsedData>;

Expand Down Expand Up @@ -1475,7 +1475,7 @@ export type EasingFunction =
| 'easeOutBounce'
| 'easeInOutBounce';

export type AnimationSpec<TParsedData> = {
export type AnimationSpec<TParsedData extends unknown> = {
/**
* The number of milliseconds an animation takes.
* @default 1000
Expand Down Expand Up @@ -1506,7 +1506,7 @@ export type AnimationSpec<TParsedData> = {
loop: Scriptable<boolean, ScriptableContext<TParsedData>>;
}

export type AnimationsSpec<TParsedData> = {
export type AnimationsSpec<TParsedData extends unknown> = {
[name: string]: false | AnimationSpec<TParsedData> & {
properties: string[];

Expand All @@ -1528,16 +1528,16 @@ export type AnimationsSpec<TParsedData> = {
}
}

export type TransitionSpec<TParsedData> = {
export type TransitionSpec<TParsedData extends unknown> = {
animation: AnimationSpec<TParsedData>;
animations: AnimationsSpec<TParsedData>;
}

export type TransitionsSpec<TParsedData> = {
export type TransitionsSpec<TParsedData extends unknown> = {
[mode: string]: TransitionSpec<TParsedData>
}

export type AnimationOptions<TParsedData> = {
export type AnimationOptions<TParsedData extends unknown> = {
animation: false | AnimationSpec<TParsedData> & {
/**
* Callback called on each step of an animation.
Expand Down Expand Up @@ -2214,7 +2214,7 @@ export interface TitleOptions {

export type TooltipAlignment = 'start' | 'center' | 'end';

export interface TooltipModel<TParsedData> {
export interface TooltipModel<TParsedData extends unknown> {
// The items that we are rendering in the tooltip. See Tooltip Item Interface section
dataPoints: TooltipItem<TParsedData>[];

Expand Down Expand Up @@ -2272,7 +2272,7 @@ export const Tooltip: Plugin & {
setActiveElements(active: ActiveDataPoint[], eventPosition: { x: number, y: number }): void;
};

export interface TooltipCallbacks<TParsedData> {
export interface TooltipCallbacks<TParsedData extends unknown> {
beforeTitle(this: TooltipModel<TParsedData>, tooltipItems: TooltipItem<TParsedData>[]): string | string[];
title(this: TooltipModel<TParsedData>, tooltipItems: TooltipItem<TParsedData>[]): string | string[];
afterTitle(this: TooltipModel<TParsedData>, tooltipItems: TooltipItem<TParsedData>[]): string | string[];
Expand All @@ -2293,7 +2293,7 @@ export interface TooltipCallbacks<TParsedData> {
afterFooter(this: TooltipModel<TParsedData>, tooltipItems: TooltipItem<TParsedData>[]): string | string[];
}

export interface ExtendedPlugin<TParsedData, O = {}> {
export interface ExtendedPlugin<TParsedData extends unknown, O = {}> {
/**
* @desc Called before drawing the `tooltip`. If any plugin returns `false`,
* the tooltip drawing is cancelled until another `render` is triggered.
Expand All @@ -2314,7 +2314,7 @@ export interface ExtendedPlugin<TParsedData, O = {}> {
*/
afterTooltipDraw?(chart: Chart, args: { tooltip: TooltipModel<TParsedData> }, options: O): void;
}
export interface TooltipOptions<TParsedData> extends CoreInteractionOptions {
export interface TooltipOptions<TParsedData extends unknown> extends CoreInteractionOptions {
/**
* Are on-canvas tooltips enabled?
* @default true
Expand Down Expand Up @@ -2488,7 +2488,7 @@ export interface TooltipOptions<TParsedData> extends CoreInteractionOptions {
callbacks: TooltipCallbacks<TParsedData>;
}

export interface TooltipItem<TParsedData> {
export interface TooltipItem<TParsedData extends unknown> {
/**
* The chart the tooltip is being shown on
*/
Expand Down Expand Up @@ -2535,14 +2535,14 @@ export interface TooltipItem<TParsedData> {
element: Element;
}

export interface PluginOptionsByType<TParsedData> {
export interface PluginOptionsByType<TParsedData extends unknown> {
decimation: DecimationOptions;
filler: FillerOptions;
legend: LegendOptions;
title: TitleOptions;
tooltip: TooltipOptions<TParsedData>;
}
export interface PluginChartOptions<TParsedData> {
export interface PluginChartOptions<TParsedData extends unknown> {
plugins: Partial<PluginOptionsByType<TParsedData>>;
}

Expand Down Expand Up @@ -3130,7 +3130,7 @@ export interface ScaleTypeRegistry extends CartesianScaleTypeRegistry, RadialSca

export type ScaleType = keyof ScaleTypeRegistry;

interface CartesianParsedData {
export interface CartesianParsedData {
x: number;
y: number;

Expand All @@ -3144,7 +3144,7 @@ interface CartesianParsedData {
}
}

interface BarParsedData extends CartesianParsedData {
export interface BarParsedData extends CartesianParsedData {
// Only specified if floating bars are show
_custom?: {
barStart: number;
Expand All @@ -3156,12 +3156,12 @@ interface BarParsedData extends CartesianParsedData {
}
}

interface BubbleParsedData extends CartesianParsedData {
export interface BubbleParsedData extends CartesianParsedData {
// The bubble radius value
_custom: number;
}

interface RadialParsedData {
export interface RadialParsedData {
r: number;
}

Expand Down Expand Up @@ -3242,10 +3242,10 @@ export type ScaleChartOptions<TType extends ChartType = ChartType> = {
};
};

export type ChartOptions<TType extends ChartType = ChartType, TParsedData = unknown> = DeepPartial<
CoreChartOptions<TParsedData> &
export type ChartOptions<TType extends ChartType = ChartType> = DeepPartial<
CoreChartOptions<ChartType extends TType ? ChartTypeRegistry[TType]['parsedDataType'] : unknown> &
ElementChartOptions &
PluginChartOptions<TParsedData> &
PluginChartOptions<ChartType extends TType ? ChartTypeRegistry[TType]['parsedDataType'] : unknown> &
DatasetChartOptions<TType> &
ScaleChartOptions<TType> &
ChartTypeRegistry[TType]['chartOptions']
Expand Down Expand Up @@ -3282,10 +3282,9 @@ export interface ChartConfiguration<
TType extends ChartType = ChartType,
TData extends unknown[] = DefaultDataPoint<TType>,
TLabel = unknown,
TParsedData extends unknown = ParsedDataType<TType>,
> {
type: TType;
data: ChartData<TType, TData, TLabel>;
options?: ChartOptions<TType, TParsedData>;
options?: ChartOptions<TType>;
plugins?: Plugin[];
}
18 changes: 18 additions & 0 deletions types/tests/test_specify_types_chart_constructor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Chart, CartesianParsedData } from '../index.esm';

const chart = new Chart('id', {
type: 'scatter',
data: {
labels: [],
datasets: []
},
options: {},
});

interface Context {
chart: Chart;
}

const ctx: Context = {
chart: chart
};