Make type-tests strict (#8717)

This commit is contained in:
Jukka Kurkela 2021-03-25 21:09:35 +02:00 committed by GitHub
parent 3671c01c26
commit 499a71d4eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 60 additions and 7 deletions

View File

@ -20,5 +20,8 @@
"include": [
"./src/**/*.js",
"./types"
],
"exclude": [
"./types/tests"
]
}

11
types/index.esm.d.ts vendored
View File

@ -633,14 +633,13 @@ export interface Defaults extends CoreChartOptions<ChartType>, ElementChartOptio
}
export type Overrides = {
[key in ChartType]: DeepPartial<
[key in ChartType]:
CoreChartOptions<key> &
ElementChartOptions &
PluginChartOptions<key> &
DatasetChartOptions<ChartType> &
ScaleChartOptions<key> &
ChartTypeRegistry[key]['chartOptions']
>;
ChartTypeRegistry[key]['chartOptions'];
}
export const defaults: Defaults;
@ -2561,7 +2560,7 @@ export interface PluginOptionsByType<TType extends ChartType> {
tooltip: TooltipOptions<TType>;
}
export interface PluginChartOptions<TType extends ChartType> {
plugins: Partial<PluginOptionsByType<TType>>;
plugins: PluginOptionsByType<TType>;
}
export interface GridLineOptions {
@ -3245,9 +3244,9 @@ export interface ChartTypeRegistry {
export type ChartType = keyof ChartTypeRegistry;
export type ScaleOptionsByType<TScale extends ScaleType = ScaleType> = DeepPartial<
export type ScaleOptionsByType<TScale extends ScaleType = ScaleType> =
{ [key in ScaleType]: { type: key } & ScaleTypeRegistry[key]['options'] }[TScale]
>;
;
export type DatasetChartOptions<TType extends ChartType = ChartType> = {
[key in TType]: {

View File

@ -0,0 +1,18 @@
import { defaults } from '../../index.esm';
// https://github.com/chartjs/Chart.js/issues/8711
const original = defaults.plugins.legend.labels.generateLabels;
defaults.plugins.legend.labels.generateLabels = function(chart) {
return [{
datasetIndex: 0,
text: 'test'
}];
};
// @ts-expect-error Type '{ text: string; }[]' is not assignable to type 'LegendItem[]'.
defaults.plugins.legend.labels.generateLabels = function(chart) {
return [{
text: 'test'
}];
};

View File

@ -0,0 +1,32 @@
import { Chart } from '../../index.esm';
const chart = new Chart('test', {
type: 'bar',
data: {
labels: ['a'],
datasets: [{
data: [1],
}, {
type: 'line',
data: [{ x: 1, y: 1 }]
}]
},
options: {
scales: {
x: {
type: 'time',
time: {
unit: 'year'
}
},
x1: {
// @ts-expect-error Type '"linear"' is not assignable to type '"timeseries" | undefined'.
type: 'linear',
time: {
// @ts-expect-error Type 'string' is not assignable to type 'false | "millisecond" | "second" | "minute" | "hour" | "day" | "week" | "month" | "quarter" | "year" | undefined'.
unit: 'year'
}
}
}
}
});

View File

@ -3,6 +3,7 @@
"target": "ES6",
"moduleResolution": "Node",
"alwaysStrict": true,
"strict": true,
"noEmit": true
},
"include": [

2
types/utils.d.ts vendored
View File

@ -12,7 +12,7 @@ export type DeepPartial<T> = T extends Function
type _DeepPartialArray<T> = Array<DeepPartial<T>>
type _DeepPartialObject<T> = { [P in keyof T]?: DeepPartial<T[P]> };
export type DistributiveArray<T> = T extends unknown ? T[] : never
export type DistributiveArray<T> = [T] extends [unknown] ? Array<T> : never
// From https://stackoverflow.com/a/50375286
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;