* }
*/
+import { DeepPartial, DistributiveArray } from './utils';
+
import { TimeUnit } from './adapters';
import { AnimationEvent } from './animation';
import { AnyObject, EmptyObject } from './basic';
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;
export type ParsedDataType<TType extends ChartType = ChartType> = ChartTypeRegistry[TType]['parsedDataType'];
-
export interface ChartDatasetProperties<TType extends ChartType, TData> {
type?: TType;
data: TData;
--- /dev/null
+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'
+};
--- /dev/null
+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
+};
--- /dev/null
+
+// 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