]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Types: Add couple of tests, move utils to new file (#8526)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Fri, 26 Feb 2021 21:29:10 +0000 (23:29 +0200)
committerGitHub <noreply@github.com>
Fri, 26 Feb 2021 21:29:10 +0000 (16:29 -0500)
types/index.esm.d.ts
types/tests/parsed.data.type.ts [new file with mode: 0644]
types/tests/scriptable.ts [new file with mode: 0644]
types/utils.d.ts [new file with mode: 0644]

index a72156a6ca8e92b82c9cbedf12dce0012d9ab986..b5fb8e5c865e361790a75c328c47b3f1c82d0c2c 100644 (file)
@@ -12,6 +12,8 @@
  * }
  */
 
+import { DeepPartial, DistributiveArray } from './utils';
+
 import { TimeUnit } from './adapters';
 import { AnimationEvent } from './animation';
 import { AnyObject, EmptyObject } from './basic';
@@ -3085,21 +3087,6 @@ export const RadialLinearScale: ChartComponent & {
   new <O extends RadialLinearScaleOptions = RadialLinearScaleOptions>(cfg: AnyObject): RadialLinearScale<O>;
 };
 
-// DeepPartial implementation taken from the utility-types NPM package, which is
-// Copyright (c) 2016 Piotr Witek <piotrek.witek@gmail.com> (http://piotrwitek.github.io)
-// and used under the terms of the MIT license
-export type DeepPartial<T> = T extends Function
-  ? T
-  : T extends Array<infer U>
-  ? _DeepPartialArray<U>
-  : T extends object
-  ? _DeepPartialObject<T>
-  : T | undefined;
-  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 interface CartesianScaleTypeRegistry {
   linear: {
     options: LinearScaleOptions;
@@ -3254,7 +3241,6 @@ export type DefaultDataPoint<TType extends ChartType> = DistributiveArray<ChartT
 
 export type ParsedDataType<TType extends ChartType = ChartType> = ChartTypeRegistry[TType]['parsedDataType'];
 
-
 export interface ChartDatasetProperties<TType extends ChartType, TData> {
   type?: TType;
   data: TData;
diff --git a/types/tests/parsed.data.type.ts b/types/tests/parsed.data.type.ts
new file mode 100644 (file)
index 0000000..a0357f0
--- /dev/null
@@ -0,0 +1,18 @@
+import { ParsedDataType } from '../index.esm';
+
+interface test {
+  pie: ParsedDataType<'pie'>,
+  line: ParsedDataType<'line'>,
+  testA: ParsedDataType<'pie' | 'line' | 'bar'>
+  testB: ParsedDataType<'pie' | 'line' | 'bar'>
+  testC: ParsedDataType<'pie' | 'line' | 'bar'>
+}
+
+export const testImpl: test = {
+  pie: 1,
+  line: { x: 1, y: 2 },
+  testA: 1,
+  testB: { x: 1, y: 2 },
+  // @ts-expect-error testC should be limited to pie/line datatypes
+  testC: 'test'
+};
diff --git a/types/tests/scriptable.ts b/types/tests/scriptable.ts
new file mode 100644 (file)
index 0000000..7fde9ac
--- /dev/null
@@ -0,0 +1,21 @@
+import { Scriptable } from '../index.esm';
+
+interface test {
+  pie?: Scriptable<number, 'pie'>,
+  line?: Scriptable<number, 'line'>,
+  testA?: Scriptable<number, 'pie' | 'line' | 'bar'>
+  testB?: Scriptable<number, 'pie' | 'line' | 'bar'>
+  testC?: Scriptable<number, 'pie' | 'line' | 'bar'>
+}
+
+const pieScriptable: Scriptable<number, 'pie'> = (ctx) => ctx.parsed;
+const lineScriptable: Scriptable<number, 'line'> = (ctx) => ctx.parsed.x + ctx.parsed.y;
+
+export const testImpl: test = {
+  pie: (ctx) => ctx.parsed,
+  line: (ctx) => ctx.parsed.x + ctx.parsed.y,
+  testA: pieScriptable,
+  testB: lineScriptable,
+  // @FIXME ts-expect-error combined type should not be any
+  testC: (ctx) => ctx.fail
+};
diff --git a/types/utils.d.ts b/types/utils.d.ts
new file mode 100644 (file)
index 0000000..6cfbd7d
--- /dev/null
@@ -0,0 +1,15 @@
+
+// DeepPartial implementation taken from the utility-types NPM package, which is
+// Copyright (c) 2016 Piotr Witek <piotrek.witek@gmail.com> (http://piotrwitek.github.io)
+// and used under the terms of the MIT license
+export type DeepPartial<T> = T extends Function
+  ? T
+  : T extends Array<infer U>
+  ? _DeepPartialArray<U>
+  : T extends object
+  ? _DeepPartialObject<T>
+  : T | undefined;
+  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