From 06b33ad9337c5e0583143c07afcc2a3f9fbe9b8d Mon Sep 17 00:00:00 2001 From: pissang Date: Sun, 5 Sep 2021 11:33:34 +0800 Subject: [PATCH 1/9] fix(type): improve some types --- index.d.ts | 5 ++++- src/chart/candlestick/CandlestickSeries.ts | 6 +++--- src/chart/line/LineSeries.ts | 2 +- src/chart/lines/LinesSeries.ts | 7 ++++++- src/coord/radar/RadarModel.ts | 1 + src/data/helper/transform.ts | 2 +- src/util/format.ts | 2 +- 7 files changed, 17 insertions(+), 8 deletions(-) diff --git a/index.d.ts b/index.d.ts index 20195af345..1941965fbe 100644 --- a/index.d.ts +++ b/index.d.ts @@ -17,4 +17,7 @@ * under the License. */ -export * from './types/dist/echarts'; \ No newline at end of file +import * as echarts from './types/dist/echarts'; +// Export for UMD module. +export as namespace echarts +export = echarts; \ No newline at end of file diff --git a/src/chart/candlestick/CandlestickSeries.ts b/src/chart/candlestick/CandlestickSeries.ts index d71cecd57d..e9079ca37b 100644 --- a/src/chart/candlestick/CandlestickSeries.ts +++ b/src/chart/candlestick/CandlestickSeries.ts @@ -28,17 +28,17 @@ import { ColorString, SeriesLabelOption, SeriesLargeOptionMixin, - OptionDataValueNumeric, StatesOptionMixin, SeriesEncodeOptionMixin, - DefaultEmphasisFocus + DefaultEmphasisFocus, + OptionDataValue } from '../../util/types'; import SeriesData from '../../data/SeriesData'; import Cartesian2D from '../../coord/cartesian/Cartesian2D'; import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; import { mixin } from 'zrender/src/core/util'; -type CandlestickDataValue = OptionDataValueNumeric[]; +type CandlestickDataValue = OptionDataValue[]; interface CandlestickItemStyleOption extends ItemStyleOption { color0?: ZRColor diff --git a/src/chart/line/LineSeries.ts b/src/chart/line/LineSeries.ts index a836132e4d..9114ee69f8 100644 --- a/src/chart/line/LineSeries.ts +++ b/src/chart/line/LineSeries.ts @@ -115,7 +115,7 @@ export interface LineSeriesOption extends SeriesOption, LinesStateOption, diff --git a/src/coord/radar/RadarModel.ts b/src/coord/radar/RadarModel.ts index 070892f064..1144ab07c8 100644 --- a/src/coord/radar/RadarModel.ts +++ b/src/coord/radar/RadarModel.ts @@ -42,6 +42,7 @@ function defaultsShow(opt: object, show: boolean) { } export interface RadarIndicatorOption { + name?: string text?: string min?: number max?: number diff --git a/src/data/helper/transform.ts b/src/data/helper/transform.ts index 78c1a70754..6e5181f140 100644 --- a/src/data/helper/transform.ts +++ b/src/data/helper/transform.ts @@ -42,7 +42,7 @@ export type DataTransformConfig = unknown; export interface DataTransformOption { type: DataTransformType; - config: DataTransformConfig; + config?: DataTransformConfig; // Print the result via `console.log` when transform performed. Only work in dev mode for debug. print?: boolean; } diff --git a/src/util/format.ts b/src/util/format.ts index c4950201d9..1f9749edc7 100644 --- a/src/util/format.ts +++ b/src/util/format.ts @@ -260,7 +260,7 @@ export function getTooltipMarker(inOpt: ColorString | GetTooltipMarkerOpt, extra * and `module:echarts/util/number#parseDate`. * @inner */ -export function formatTime(tpl: string, value: unknown, isUTC: boolean) { +export function formatTime(tpl: string, value: unknown, isUTC?: boolean) { if (__DEV__) { deprecateReplaceLog('echarts.format.formatTime', 'echarts.time.format'); } From 754f6765e63773ff4f4261cfd09a9b4c794a0a30 Mon Sep 17 00:00:00 2001 From: pissang Date: Wed, 8 Sep 2021 13:17:15 +0800 Subject: [PATCH 2/9] fix(type): more precise axis types --- src/component/marker/MarkLineView.ts | 1 - src/coord/Axis.ts | 4 +- src/coord/AxisBaseModel.ts | 6 +- src/coord/axisCommonTypes.ts | 141 ++++++++++++++++----------- src/coord/axisHelper.ts | 18 +++- src/coord/axisModelCreator.ts | 14 +-- src/coord/cartesian/AxisModel.ts | 14 +-- src/coord/cartesian/Grid.ts | 4 +- src/coord/parallel/AxisModel.ts | 6 +- src/coord/parallel/Parallel.ts | 5 +- src/coord/polar/AxisModel.ts | 12 +-- src/coord/polar/polarCreator.ts | 5 +- src/coord/radar/RadarModel.ts | 9 +- src/coord/scaleRawExtentInfo.ts | 4 +- src/coord/single/AxisModel.ts | 6 +- src/coord/single/Single.ts | 4 +- src/scale/Ordinal.ts | 4 +- 17 files changed, 151 insertions(+), 106 deletions(-) diff --git a/src/component/marker/MarkLineView.ts b/src/component/marker/MarkLineView.ts index 212ce68ced..07335a1de8 100644 --- a/src/component/marker/MarkLineView.ts +++ b/src/component/marker/MarkLineView.ts @@ -41,7 +41,6 @@ import { logError, merge, map, - defaults, curry, filter, HashMap diff --git a/src/coord/Axis.ts b/src/coord/Axis.ts index a2f3e0ae89..7a334a0a4b 100644 --- a/src/coord/Axis.ts +++ b/src/coord/Axis.ts @@ -28,7 +28,7 @@ import Scale from '../scale/Scale'; import { DimensionName, ScaleDataValue, ScaleTick } from '../util/types'; import OrdinalScale from '../scale/Ordinal'; import Model from '../model/Model'; -import { AxisBaseOption, OptionAxisType } from './axisCommonTypes'; +import { AxisBaseOption, CategoryAxisBaseOption, OptionAxisType } from './axisCommonTypes'; import { AxisBaseModel } from './AxisBaseModel'; const NORMALIZED_EXTENT = [0, 1] as [number, number]; @@ -63,7 +63,7 @@ class Axis { // Injected outside model: AxisBaseModel; - onBand: AxisBaseOption['boundaryGap'] = false; + onBand: CategoryAxisBaseOption['boundaryGap'] = false; inverse: AxisBaseOption['inverse'] = false; diff --git a/src/coord/AxisBaseModel.ts b/src/coord/AxisBaseModel.ts index 18cd29a292..9b482f0cb0 100644 --- a/src/coord/AxisBaseModel.ts +++ b/src/coord/AxisBaseModel.ts @@ -20,16 +20,16 @@ /** * Base Axis Model for xAxis, yAxis, angleAxis, radiusAxis. singleAxis */ -import { AxisBaseOption } from './axisCommonTypes'; +import { AxisBaseOptionCommon } from './axisCommonTypes'; import ComponentModel from '../model/Component'; import { AxisModelCommonMixin } from './axisModelCommonMixin'; import { AxisModelExtendedInCreator } from './axisModelCreator'; import Axis from './Axis'; -export interface AxisBaseModel +export interface AxisBaseModel extends ComponentModel, AxisModelCommonMixin, - AxisModelExtendedInCreator { + AxisModelExtendedInCreator { axis: Axis } \ No newline at end of file diff --git a/src/coord/axisCommonTypes.ts b/src/coord/axisCommonTypes.ts index 9d9bf1117a..3fe8999d98 100644 --- a/src/coord/axisCommonTypes.ts +++ b/src/coord/axisCommonTypes.ts @@ -20,16 +20,15 @@ import { TextCommonOption, LineStyleOption, OrdinalRawValue, ZRColor, AreaStyleOption, ComponentOption, ColorString, - AnimationOptionMixin, Dictionary, ScaleDataValue + AnimationOptionMixin, Dictionary, ScaleDataValue, CommonAxisPointerOption } from '../util/types'; export const AXIS_TYPES = {value: 1, category: 1, time: 1, log: 1} as const; export type OptionAxisType = keyof typeof AXIS_TYPES; - -export interface AxisBaseOption extends ComponentOption, - AnimationOptionMixin { // Support transition animation +export interface AxisBaseOptionCommon extends ComponentOption, + AnimationOptionMixin { type?: OptionAxisType; show?: boolean; // Inverse the axis. @@ -55,21 +54,16 @@ export interface AxisBaseOption extends ComponentOption, show?: boolean; }; - axisPointer?: any; // FIXME:TS axisPointerOption type? + axisLabel?: AxisLabelBaseOption; + + axisPointer?: CommonAxisPointerOption; axisLine?: AxisLineOption; axisTick?: AxisTickOption; - axisLabel?: AxisLabelOption; minorTick?: MinorTickOption; splitLine?: SplitLineOption; minorSplitLine?: MinorSplitLineOption; splitArea?: SplitAreaOption; - // The gap at both ends of the axis. - // For category axis: boolean. - // For value axis: [GAP, GAP], where - // `GAP` can be an absolute pixel number (like `35`), or percent (like `'30%'`) - boundaryGap?: boolean | [number | string, number | string]; - // Min value of the axis. can be: // + ScaleDataValue // + 'dataMin': use the min value in data. @@ -85,43 +79,74 @@ export interface AxisBaseOption extends ComponentOption, // + `true`: the extent do not consider value 0. scale?: boolean; +} - // -------------------------------------------- - // [Properties below only for 'category' axis]: - - // Set false to faster category collection. - // Only usefull in the case like: category is - // ['2012-01-01', '2012-01-02', ...], where the input - // data has been ensured not duplicate and is large data. - // null means "auto": - // if axis.data provided, do not deduplication, - // else do deduplication. - deduplication?: boolean; - data?: (OrdinalRawValue | { - value: OrdinalRawValue; - textStyle?: TextCommonOption; - })[]; - - - // ------------------------------------------------------ - // [Properties below only for 'value'/'log'/'time' axes]: - - // AxisTick and axisLabel and splitLine are caculated based on splitNumber. +interface NumericAxisBaseOptionCommon extends AxisBaseOptionCommon { + /* + * The gap at both ends of the axis. + * [GAP, GAP], where + * `GAP` can be an absolute pixel number (like `35`), or percent (like `'30%'`) + */ + boundaryGap?: [number | string, number | string] + + /** + * AxisTick and axisLabel and splitLine are caculated based on splitNumber. + */ splitNumber?: number; - // Interval specifies the span of the ticks is mandatorily. + /** + * Interval specifies the span of the ticks is mandatorily. + */ interval?: number; - // Specify min interval when auto calculate tick interval. + /** + * Specify min interval when auto calculate tick interval. + */ minInterval?: number; - // Specify max interval when auto calculate tick interval. + /** + * Specify max interval when auto calculate tick interval. + */ maxInterval?: number; +} +export interface CategoryAxisBaseOption extends AxisBaseOptionCommon { + type?: 'category'; + boundaryGap?: boolean + axisLabel?: AxisLabelOption<'category'> & { + interval?: 'auto' | number | ((index: number, value: string) => boolean) + }; + data?: (OrdinalRawValue | { + value: OrdinalRawValue; + textStyle?: TextCommonOption; + })[]; + /* + * Set false to faster category collection. + * Only usefull in the case like: category is + * ['2012-01-01', '2012-01-02', ...], where the input + * data has been ensured not duplicate and is large data. + * null means "auto": + * if axis.data provided, do not deduplication, + * else do deduplication. + */ + deduplication?: boolean; - // --------------------------------------- - // [Properties below only for 'log' axis]: - + axisTick?: AxisBaseOptionCommon['axisTick'] & { + // If tick is align with label when boundaryGap is true + alignWithLabel?: boolean, + interval?: 'auto' | number | ((index: number, value: string) => boolean) + } +} +export interface ValueAxisBaseOption extends NumericAxisBaseOptionCommon { + type?: 'value'; + axisLabel?: AxisLabelOption<'value'>; +} +export interface LogAxisBaseOption extends NumericAxisBaseOptionCommon { + type?: 'log'; + axisLabel?: AxisLabelOption<'log'>; logBase?: number; } - +export interface TimeAxisBaseOption extends NumericAxisBaseOptionCommon { + type?: 'time'; + axisLabel?: AxisLabelOption<'time'>; +} interface AxisNameTextStyleOption extends TextCommonOption { rich?: Dictionary } @@ -147,15 +172,13 @@ interface AxisTickOption { // -------------------------------------------- // [Properties below only for 'category' axis]: - - // If tick is align with label when boundaryGap is true - alignWithLabel?: boolean, - interval?: 'auto' | number | ((index: number, value: string) => boolean) } -export type AxisLabelFormatterOption = string | ((value: OrdinalRawValue | number, index: number) => string); +type AxisLabelValueFormatter = (value: number, index: number) => string; +type AxisLabelCategoryFormatter = (value: string, index: number) => string; -type TimeAxisLabelUnitFormatter = AxisLabelFormatterOption | string[]; +// export type AxisLabelFormatterOption = string | ((value: OrdinalRawValue | number, index: number) => string); +type TimeAxisLabelUnitFormatter = AxisLabelValueFormatter | string[] | string; export type TimeAxisLabelFormatterOption = string | ((value: number, index: number, extra: {level: number}) => string) @@ -171,7 +194,14 @@ export type TimeAxisLabelFormatterOption = string inherit?: boolean }; -interface AxisLabelOption extends Omit { +type LabelFormatters = { + value: AxisLabelValueFormatter | string + log: AxisLabelValueFormatter | string + category: AxisLabelCategoryFormatter | string + time: TimeAxisLabelFormatterOption +}; + +interface AxisLabelBaseOption extends Omit { show?: boolean, // Whether axisLabel is inside the grid or outside the grid. inside?: boolean, @@ -181,18 +211,13 @@ interface AxisLabelOption extends Omit { // true | false | null/undefined (auto) showMaxLabel?: boolean, margin?: number, - // value is supposed to be OptionDataPrimitive but for time axis, it is time stamp. - formatter?: AxisLabelFormatterOption | TimeAxisLabelFormatterOption, - - // -------------------------------------------- - // [Properties below only for 'category' axis]: - - interval?: 'auto' | number | ((index: number, value: string) => boolean) + rich?: Dictionary // Color can be callback color?: ColorString | ((value?: string | number, index?: number) => ColorString) - - rich?: Dictionary +} +interface AxisLabelOption extends AxisLabelBaseOption { + formatter?: LabelFormatters[TType] } interface MinorTickOption { @@ -220,3 +245,7 @@ interface SplitAreaOption { // colors will display in turn areaStyle?: AreaStyleOption } + + +export type AxisBaseOption = ValueAxisBaseOption | LogAxisBaseOption + | CategoryAxisBaseOption | TimeAxisBaseOption | AxisBaseOptionCommon; diff --git a/src/coord/axisHelper.ts b/src/coord/axisHelper.ts index d058db3ad1..53a60b6f5b 100644 --- a/src/coord/axisHelper.ts +++ b/src/coord/axisHelper.ts @@ -33,7 +33,13 @@ import Model from '../model/Model'; import { AxisBaseModel } from './AxisBaseModel'; import LogScale from '../scale/Log'; import Axis from './Axis'; -import { AxisBaseOption, TimeAxisLabelFormatterOption } from './axisCommonTypes'; +import { + AxisBaseOption, + CategoryAxisBaseOption, + LogAxisBaseOption, + TimeAxisLabelFormatterOption, + ValueAxisBaseOption +} from './axisCommonTypes'; import type CartesianAxisModel from './cartesian/AxisModel'; import SeriesData from '../data/SeriesData'; import { getStackedDimension } from '../data/helper/dataStackHelper'; @@ -143,7 +149,8 @@ function adjustScaleForOverflow( // Precondition of calling this method: // The scale extent has been initailized using series data extent via // `scale.setExtent` or `scale.unionExtentFromData`; -export function niceScaleExtent(scale: Scale, model: AxisBaseModel) { +export function niceScaleExtent(scale: Scale, inModel: AxisBaseModel) { + const model = inModel as AxisBaseModel; const extentInfo = getScaleExtent(scale, model); const extent = extentInfo.extent; const splitNumber = model.get('splitNumber'); @@ -221,7 +228,8 @@ export function ifAxisCrossZero(axis: Axis) { * return: {string} label string. */ export function makeLabelFormatter(axis: Axis): (tick: ScaleTick, idx?: number) => string { - const labelFormatter = axis.getLabelModel().get('formatter'); + const labelFormatter = (axis.getLabelModel() as Model) + .get('formatter'); const categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null; if (axis.scale.type === 'time') { @@ -263,7 +271,7 @@ export function makeLabelFormatter(axis: Axis): (tick: ScaleTick, idx?: number) } : null ); }; - })(labelFormatter); + })(labelFormatter as (...args: any[]) => string); } else { return function (tick: ScaleTick) { @@ -347,7 +355,7 @@ function rotateTextRect(textRect: RectLike, rotate: number) { * @return {number|String} Can be null|'auto'|number|function */ export function getOptionCategoryInterval(model: Model) { - const interval = model.get('interval'); + const interval = (model as Model).get('interval'); return interval == null ? 'auto' : interval; } diff --git a/src/coord/axisModelCreator.ts b/src/coord/axisModelCreator.ts index 5d275ee459..f7d80720cb 100644 --- a/src/coord/axisModelCreator.ts +++ b/src/coord/axisModelCreator.ts @@ -26,7 +26,7 @@ import { } from '../util/layout'; import OrdinalMeta from '../data/OrdinalMeta'; import { DimensionName, BoxLayoutOptionMixin, OrdinalRawValue } from '../util/types'; -import { AxisBaseOption, AXIS_TYPES } from './axisCommonTypes'; +import { AxisBaseOption, AXIS_TYPES, CategoryAxisBaseOption } from './axisCommonTypes'; import GlobalModel from '../model/Global'; import { each, merge } from 'zrender/src/core/util'; import { EChartsExtensionInstallRegisters } from '../extension'; @@ -34,8 +34,8 @@ import { EChartsExtensionInstallRegisters } from '../extension'; type Constructor = new (...args: any[]) => T; -export interface AxisModelExtendedInCreator { - getCategories(rawData?: boolean): OrdinalRawValue[] | Opt['data'] +export interface AxisModelExtendedInCreator { + getCategories(rawData?: boolean): OrdinalRawValue[] | CategoryAxisBaseOption['data'] getOrdinalMeta(): OrdinalMeta } @@ -60,7 +60,7 @@ export default function axisModelCreator< extraDefaultOption, true ); - class AxisModel extends BaseAxisModelClass implements AxisModelExtendedInCreator { + class AxisModel extends BaseAxisModelClass implements AxisModelExtendedInCreator { static type = axisName + 'Axis.' + axisType; type = axisName + 'Axis.' + axisType; @@ -97,13 +97,13 @@ export default function axisModelCreator< * Should not be called before all of 'getInitailData' finished. * Because categories are collected during initializing data. */ - getCategories(rawData?: boolean): OrdinalRawValue[] | AxisBaseOption['data'] { + getCategories(rawData?: boolean): OrdinalRawValue[] | CategoryAxisBaseOption['data'] { const option = this.option; // FIXME // warning if called before all of 'getInitailData' finished. if (option.type === 'category') { if (rawData) { - return option.data as AxisBaseOption['data']; + return (option as CategoryAxisBaseOption).data; } return this.__ordinalMeta.categories; } @@ -125,5 +125,5 @@ export default function axisModelCreator< function getAxisType(option: AxisBaseOption) { // Default axis with data is category axis - return option.type || (option.data ? 'category' : 'value'); + return option.type || ((option as CategoryAxisBaseOption).data ? 'category' : 'value'); } diff --git a/src/coord/cartesian/AxisModel.ts b/src/coord/cartesian/AxisModel.ts index 076b1c142f..726e0fa798 100644 --- a/src/coord/cartesian/AxisModel.ts +++ b/src/coord/cartesian/AxisModel.ts @@ -31,21 +31,21 @@ import { SINGLE_REFERRING } from '../../util/model'; export type CartesianAxisPosition = 'top' | 'bottom' | 'left' | 'right'; -export interface CartesianAxisOption extends AxisBaseOption { +export type CartesianAxisOption = AxisBaseOption & { gridIndex?: number; gridId?: string; position?: CartesianAxisPosition; // Offset is for multiple axis on the same position. offset?: number; categorySortInfo?: OrdinalSortInfo; -} +}; -export interface XAXisOption extends CartesianAxisOption { +export type XAXisOption = CartesianAxisOption & { mainType?: 'xAxis' -} -export interface YAXisOption extends CartesianAxisOption { +}; +export type YAXisOption = CartesianAxisOption & { mainType?: 'yAxis' -} +}; export class CartesianAxisModel extends ComponentModel implements AxisBaseModel { @@ -60,7 +60,7 @@ export class CartesianAxisModel extends ComponentModel } export interface CartesianAxisModel extends AxisModelCommonMixin, - AxisModelExtendedInCreator {} + AxisModelExtendedInCreator {} zrUtil.mixin(CartesianAxisModel, AxisModelCommonMixin); diff --git a/src/coord/cartesian/Grid.ts b/src/coord/cartesian/Grid.ts index 6eef23eac1..aba0b732c0 100644 --- a/src/coord/cartesian/Grid.ts +++ b/src/coord/cartesian/Grid.ts @@ -47,6 +47,8 @@ import { ScaleDataValue } from '../../util/types'; import SeriesData from '../../data/SeriesData'; import OrdinalScale from '../../scale/Ordinal'; import { isCartesian2DSeries, findAxisModels } from './cartesianAxisHelper'; +import { CategoryAxisBaseOption } from '../axisCommonTypes'; +import { AxisBaseModel } from '../AxisBaseModel'; type Cartesian2DDimensionName = 'x' | 'y'; @@ -388,7 +390,7 @@ class Grid implements CoordinateSystemMaster { ); const isCategory = axis.type === 'category'; - axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.onBand = isCategory && (axisModel as AxisBaseModel).get('boundaryGap'); axis.inverse = axisModel.get('inverse'); // Inject axis into axisModel diff --git a/src/coord/parallel/AxisModel.ts b/src/coord/parallel/AxisModel.ts index 31beb29f8a..877dbaec85 100644 --- a/src/coord/parallel/AxisModel.ts +++ b/src/coord/parallel/AxisModel.ts @@ -40,7 +40,7 @@ export type ParallelAreaSelectStyleProps = Pick { @@ -140,7 +140,7 @@ class ParallelAxisModel extends ComponentModel { } interface ParallelAxisModel extends AxisModelCommonMixin, - AxisModelExtendedInCreator {} + AxisModelExtendedInCreator {} zrUtil.mixin(ParallelAxisModel, AxisModelCommonMixin); diff --git a/src/coord/parallel/Parallel.ts b/src/coord/parallel/Parallel.ts index e22cf9a8d7..f8c472dad1 100644 --- a/src/coord/parallel/Parallel.ts +++ b/src/coord/parallel/Parallel.ts @@ -38,6 +38,8 @@ import { Dictionary, DimensionName, ScaleDataValue } from '../../util/types'; import { CoordinateSystem, CoordinateSystemMaster } from '../CoordinateSystem'; import ParallelAxisModel, { ParallelActiveState } from './AxisModel'; import SeriesData from '../../data/SeriesData'; +import { AxisBaseModel } from '../AxisBaseModel'; +import { CategoryAxisBaseOption } from '../axisCommonTypes'; const each = zrUtil.each; const mathMin = Math.min; @@ -131,7 +133,8 @@ class Parallel implements CoordinateSystemMaster, CoordinateSystem { )); const isCategory = axis.type === 'category'; - axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.onBand = isCategory + && (axisModel as AxisBaseModel).get('boundaryGap'); axis.inverse = axisModel.get('inverse'); // Injection diff --git a/src/coord/polar/AxisModel.ts b/src/coord/polar/AxisModel.ts index 2afbc3c11e..af2414a673 100644 --- a/src/coord/polar/AxisModel.ts +++ b/src/coord/polar/AxisModel.ts @@ -27,7 +27,7 @@ import RadiusAxis from './RadiusAxis'; import { AxisBaseModel } from '../AxisBaseModel'; import { SINGLE_REFERRING } from '../../util/model'; -export interface AngleAxisOption extends AxisBaseOption { +export type AngleAxisOption = AxisBaseOption & { mainType?: 'angleAxis'; /** * Index of host polar component @@ -41,12 +41,10 @@ export interface AngleAxisOption extends AxisBaseOption { startAngle?: number; clockwise?: boolean; - splitNumber?: number; - axisLabel?: AxisBaseOption['axisLabel'] -} +}; -export interface RadiusAxisOption extends AxisBaseOption { +export type RadiusAxisOption = AxisBaseOption & { mainType?: 'radiusAxis'; /** * Index of host polar component @@ -56,7 +54,7 @@ export interface RadiusAxisOption extends AxisBaseOption { * Id of host polar component */ polarId?: string; -} +}; type PolarAxisOption = AngleAxisOption | RadiusAxisOption; @@ -72,7 +70,7 @@ class PolarAxisModel extends Compon } interface PolarAxisModel - extends AxisModelCommonMixin, AxisModelExtendedInCreator {} + extends AxisModelCommonMixin, AxisModelExtendedInCreator {} zrUtil.mixin(PolarAxisModel, AxisModelCommonMixin); diff --git a/src/coord/polar/polarCreator.ts b/src/coord/polar/polarCreator.ts index 69feeca425..4df310c1d4 100644 --- a/src/coord/polar/polarCreator.ts +++ b/src/coord/polar/polarCreator.ts @@ -38,6 +38,8 @@ import { PolarAxisModel, AngleAxisModel, RadiusAxisModel } from './AxisModel'; import SeriesModel from '../../model/Series'; import { SeriesOption } from '../../util/types'; import { SINGLE_REFERRING } from '../../util/model'; +import { AxisBaseModel } from '../AxisBaseModel'; +import { CategoryAxisBaseOption } from '../axisCommonTypes'; /** * Resize method bound to the polar @@ -115,7 +117,8 @@ function isAngleAxisModel(axisModel: AngleAxisModel | PolarAxisModel): axisModel function setAxis(axis: RadiusAxis | AngleAxis, axisModel: PolarAxisModel) { axis.type = axisModel.get('type'); axis.scale = createScaleByModel(axisModel); - axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category'; + axis.onBand = (axisModel as AxisBaseModel).get('boundaryGap') + && axis.type === 'category'; axis.inverse = axisModel.get('inverse'); if (isAngleAxisModel(axisModel)) { diff --git a/src/coord/radar/RadarModel.ts b/src/coord/radar/RadarModel.ts index 1144ab07c8..cdcd3e8181 100644 --- a/src/coord/radar/RadarModel.ts +++ b/src/coord/radar/RadarModel.ts @@ -28,7 +28,7 @@ import { LabelOption, ColorString } from '../../util/types'; -import { AxisBaseOption } from '../axisCommonTypes'; +import { AxisBaseOption, CategoryAxisBaseOption, ValueAxisBaseOption } from '../axisCommonTypes'; import { AxisBaseModel } from '../AxisBaseModel'; import Radar from './Radar'; import {CoordinateSystemHostModel} from '../../coord/CoordinateSystem'; @@ -79,15 +79,16 @@ export interface RadarOption extends ComponentOption, CircleLayoutOptionMixin { scale?: boolean splitNumber?: number - boundaryGap?: AxisBaseOption['boundaryGap'] + boundaryGap?: CategoryAxisBaseOption['boundaryGap'] + | ValueAxisBaseOption['boundaryGap'] indicator?: RadarIndicatorOption[] } -export interface InnerIndicatorAxisOption extends AxisBaseOption { +export type InnerIndicatorAxisOption = AxisBaseOption & { // TODO Use type? // axisType?: 'value' | 'log' -} +}; class RadarModel extends ComponentModel implements CoordinateSystemHostModel { static readonly type = 'radar'; diff --git a/src/coord/scaleRawExtentInfo.ts b/src/coord/scaleRawExtentInfo.ts index 5a0abb67d2..45d2dc7d43 100644 --- a/src/coord/scaleRawExtentInfo.ts +++ b/src/coord/scaleRawExtentInfo.ts @@ -21,7 +21,7 @@ import { assert, isArray, eqNaN, isFunction } from 'zrender/src/core/util'; import Scale from '../scale/Scale'; import { AxisBaseModel } from './AxisBaseModel'; import { parsePercent } from 'zrender/src/contain/text'; -import { AxisBaseOption } from './axisCommonTypes'; +import { AxisBaseOption, CategoryAxisBaseOption } from './axisCommonTypes'; import { ScaleDataValue } from '../util/types'; @@ -129,7 +129,7 @@ export class ScaleRawExtentInfo { this._axisDataLen = model.getCategories().length; } else { - const boundaryGap = model.get('boundaryGap'); + const boundaryGap = (model as AxisBaseModel).get('boundaryGap'); const boundaryGapArr = isArray(boundaryGap) ? boundaryGap : [boundaryGap || 0, boundaryGap || 0]; diff --git a/src/coord/single/AxisModel.ts b/src/coord/single/AxisModel.ts index 7f761387b9..bcd85268fd 100644 --- a/src/coord/single/AxisModel.ts +++ b/src/coord/single/AxisModel.ts @@ -29,11 +29,11 @@ import { mixin } from 'zrender/src/core/util'; export type SingleAxisPosition = 'top' | 'bottom' | 'left' | 'right'; -export interface SingleAxisOption extends AxisBaseOption, BoxLayoutOptionMixin { +export type SingleAxisOption = AxisBaseOption & BoxLayoutOptionMixin & { mainType?: 'singleAxis' position?: SingleAxisPosition orient?: LayoutOrient -} +}; class SingleAxisModel extends ComponentModel implements AxisBaseModel { @@ -102,7 +102,7 @@ class SingleAxisModel extends ComponentModel } interface SingleAxisModel extends AxisModelCommonMixin, - AxisModelExtendedInCreator {} + AxisModelExtendedInCreator {} mixin(SingleAxisModel, AxisModelCommonMixin.prototype); diff --git a/src/coord/single/Single.ts b/src/coord/single/Single.ts index 5ad403169e..4632190e41 100644 --- a/src/coord/single/Single.ts +++ b/src/coord/single/Single.ts @@ -32,6 +32,8 @@ import BoundingRect from 'zrender/src/core/BoundingRect'; import SingleAxisModel from './AxisModel'; import { ParsedModelFinder, ParsedModelFinderKnown } from '../../util/model'; import { ScaleDataValue } from '../../util/types'; +import { AxisBaseModel } from '../AxisBaseModel'; +import { CategoryAxisBaseOption } from '../axisCommonTypes'; export const singleDimensions = ['single']; /** @@ -80,7 +82,7 @@ class Single implements CoordinateSystem, CoordinateSystemMaster { ); const isCategory = axis.type === 'category'; - axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.onBand = isCategory && (axisModel as AxisBaseModel).get('boundaryGap'); axis.inverse = axisModel.get('inverse'); axis.orient = axisModel.get('orient'); diff --git a/src/scale/Ordinal.ts b/src/scale/Ordinal.ts index 7f23c2d4cc..01139da56c 100644 --- a/src/scale/Ordinal.ts +++ b/src/scale/Ordinal.ts @@ -36,11 +36,11 @@ import { OrdinalScaleTick, ScaleTick } from '../util/types'; -import { AxisBaseOption } from '../coord/axisCommonTypes'; +import { CategoryAxisBaseOption } from '../coord/axisCommonTypes'; import { isArray, map, isObject } from 'zrender/src/core/util'; type OrdinalScaleSetting = { - ordinalMeta?: OrdinalMeta | AxisBaseOption['data']; + ordinalMeta?: OrdinalMeta | CategoryAxisBaseOption['data']; extent?: [number, number]; }; From fcb66e2f191ad4d8c0fc0eaf559a108642dfa2fd Mon Sep 17 00:00:00 2001 From: pissang Date: Wed, 8 Sep 2021 17:01:21 +0800 Subject: [PATCH 3/9] fix(type): fix other states types may be any. --- src/chart/bar/BarSeries.ts | 14 +++++-- src/chart/bar/BaseBarSeries.ts | 4 +- .../effectScatter/EffectScatterSeries.ts | 14 +++++-- src/chart/funnel/FunnelSeries.ts | 11 +++-- src/chart/gauge/GaugeSeries.ts | 11 +++-- src/chart/graph/GraphSeries.ts | 12 +++--- src/chart/heatmap/HeatmapSeries.ts | 11 +++-- src/chart/helper/LineDraw.ts | 6 ++- src/chart/line/LineSeries.ts | 6 +-- src/chart/lines/LinesSeries.ts | 13 ++++-- src/chart/map/MapSeries.ts | 7 ++-- src/chart/parallel/ParallelSeries.ts | 12 ++++-- src/chart/parallel/ParallelView.ts | 4 +- src/chart/pie/PieSeries.ts | 1 - src/chart/radar/RadarSeries.ts | 11 +++-- src/chart/scatter/ScatterSeries.ts | 7 ++-- src/chart/sunburst/SunburstSeries.ts | 9 ++-- src/chart/tree/TreeSeries.ts | 10 ++--- src/component/marker/MarkAreaModel.ts | 8 ++-- src/component/marker/MarkLineModel.ts | 9 ++-- src/component/marker/MarkPointModel.ts | 7 ++-- src/coord/axisCommonTypes.ts | 3 -- src/coord/geo/GeoModel.ts | 7 ++-- src/label/labelGuideHelper.ts | 2 +- src/label/labelStyle.ts | 2 +- src/util/types.ts | 42 +++++++++++-------- test/types/basic.ts | 7 +++- 27 files changed, 158 insertions(+), 92 deletions(-) diff --git a/src/chart/bar/BarSeries.ts b/src/chart/bar/BarSeries.ts index 8c97a8b616..57323c5368 100644 --- a/src/chart/bar/BarSeries.ts +++ b/src/chart/bar/BarSeries.ts @@ -26,7 +26,8 @@ import { OptionDataItemObject, SeriesSamplingOptionMixin, SeriesLabelOption, - SeriesEncodeOptionMixin + SeriesEncodeOptionMixin, + DefaultStatesMixinEmpasis } from '../../util/types'; import type Cartesian2D from '../../coord/cartesian/Cartesian2D'; import createSeriesData from '../helper/createSeriesData'; @@ -46,16 +47,21 @@ export interface BarStateOption { label?: BarSeriesLabelOption } +interface BarStatesMixin { + emphasis?: DefaultStatesMixinEmpasis +} + export interface BarItemStyleOption extends ItemStyleOption { // Border radius is not supported for bar on polar borderRadius?: number | number[] } -export interface BarDataItemOption extends BarStateOption, StatesOptionMixin, +export interface BarDataItemOption extends BarStateOption, + StatesOptionMixin, OptionDataItemObject { cursor?: string } -export interface BarSeriesOption extends BaseBarSeriesOption, BarStateOption, +export interface BarSeriesOption extends BaseBarSeriesOption, BarStateOption, SeriesStackOptionMixin, SeriesSamplingOptionMixin, SeriesEncodeOptionMixin { type?: 'bar' @@ -151,7 +157,7 @@ class BarSeriesModel extends BaseBarSeriesModel { }, realtimeSort: false - }); + } as BarSeriesOption); } diff --git a/src/chart/bar/BaseBarSeries.ts b/src/chart/bar/BaseBarSeries.ts index d4c3fa5d19..e94e53d7e6 100644 --- a/src/chart/bar/BaseBarSeries.ts +++ b/src/chart/bar/BaseBarSeries.ts @@ -24,14 +24,14 @@ import { SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, ScaleDataValue, - DefaultExtraStateOpts + DefaultStatesMixin } from '../../util/types'; import GlobalModel from '../../model/Global'; import Cartesian2D from '../../coord/cartesian/Cartesian2D'; import SeriesData from '../../data/SeriesData'; -export interface BaseBarSeriesOption +export interface BaseBarSeriesOption extends SeriesOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin { diff --git a/src/chart/effectScatter/EffectScatterSeries.ts b/src/chart/effectScatter/EffectScatterSeries.ts index 9632e400bf..8e936b3eea 100644 --- a/src/chart/effectScatter/EffectScatterSeries.ts +++ b/src/chart/effectScatter/EffectScatterSeries.ts @@ -32,7 +32,8 @@ import { SeriesLabelOption, StatesOptionMixin, SeriesEncodeOptionMixin, - CallbackDataParams + CallbackDataParams, + DefaultEmphasisFocus } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -41,6 +42,12 @@ import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; type ScatterDataValue = OptionDataValue | OptionDataValue[]; +interface EffectScatterStatesOptionMixin { + emphasis?: { + focus?: DefaultEmphasisFocus + scale?: boolean + } +} export interface EffectScatterStateOption { itemStyle?: ItemStyleOption label?: SeriesLabelOption @@ -48,7 +55,7 @@ export interface EffectScatterStateOption { export interface EffectScatterDataItemOption extends SymbolOptionMixin, EffectScatterStateOption, - StatesOptionMixin { + StatesOptionMixin { name?: string value?: ScatterDataValue @@ -56,7 +63,8 @@ export interface EffectScatterDataItemOption extends SymbolOptionMixin, rippleEffect?: SymbolDrawItemModelOption['rippleEffect'] } -export interface EffectScatterSeriesOption extends SeriesOption, EffectScatterStateOption, +export interface EffectScatterSeriesOption + extends SeriesOption, EffectScatterStateOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SymbolOptionMixin, SeriesEncodeOptionMixin { diff --git a/src/chart/funnel/FunnelSeries.ts b/src/chart/funnel/FunnelSeries.ts index 6abe848f0a..8ac6fcf4c2 100644 --- a/src/chart/funnel/FunnelSeries.ts +++ b/src/chart/funnel/FunnelSeries.ts @@ -36,7 +36,8 @@ import { LayoutOrient, VerticalAlign, SeriesLabelOption, - SeriesEncodeOptionMixin + SeriesEncodeOptionMixin, + DefaultStatesMixinEmpasis } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -46,6 +47,10 @@ type FunnelLabelOption = Omit & { | 'outer' | 'inner' | 'center' | 'rightTop' | 'rightBottom' | 'leftTop' | 'leftBottom' }; +interface FunnelStatesMixin { + emphasis?: DefaultStatesMixinEmpasis +} + export interface FunnelStateOption { itemStyle?: ItemStyleOption label?: FunnelLabelOption @@ -53,7 +58,7 @@ export interface FunnelStateOption { } export interface FunnelDataItemOption - extends FunnelStateOption, StatesOptionMixin, + extends FunnelStateOption, StatesOptionMixin, OptionDataItemObject { itemStyle?: ItemStyleOption & { @@ -62,7 +67,7 @@ export interface FunnelDataItemOption } } -export interface FunnelSeriesOption extends SeriesOption, FunnelStateOption, +export interface FunnelSeriesOption extends SeriesOption, FunnelStateOption, BoxLayoutOptionMixin, SeriesEncodeOptionMixin { type?: 'funnel' diff --git a/src/chart/gauge/GaugeSeries.ts b/src/chart/gauge/GaugeSeries.ts index 729af9463d..b861bf708c 100644 --- a/src/chart/gauge/GaugeSeries.ts +++ b/src/chart/gauge/GaugeSeries.ts @@ -28,7 +28,8 @@ import { ItemStyleOption, OptionDataValueNumeric, StatesOptionMixin, - SeriesEncodeOptionMixin + SeriesEncodeOptionMixin, + DefaultStatesMixinEmpasis } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -102,11 +103,15 @@ interface DetailOption extends LabelOption { valueAnimation?: boolean } +interface GaugeStatesMixin { + emphasis?: DefaultStatesMixinEmpasis +} export interface GaugeStateOption { itemStyle?: ItemStyleOption } -export interface GaugeDataItemOption extends GaugeStateOption, StatesOptionMixin { +export interface GaugeDataItemOption extends GaugeStateOption, + StatesOptionMixin { name?: string value?: OptionDataValueNumeric pointer?: PointerOption @@ -114,7 +119,7 @@ export interface GaugeDataItemOption extends GaugeStateOption, StatesOptionMixin title?: TitleOption detail?: DetailOption } -export interface GaugeSeriesOption extends SeriesOption, GaugeStateOption, +export interface GaugeSeriesOption extends SeriesOption, GaugeStateOption, CircleLayoutOptionMixin, SeriesEncodeOptionMixin { type?: 'gauge' diff --git a/src/chart/graph/GraphSeries.ts b/src/chart/graph/GraphSeries.ts index 42b833d9c9..eb034015d9 100644 --- a/src/chart/graph/GraphSeries.ts +++ b/src/chart/graph/GraphSeries.ts @@ -71,16 +71,16 @@ export interface GraphNodeStateOption { interface ExtraEmphasisState { focus?: DefaultEmphasisFocus | 'adjacency' } -interface ExtraNodeStateOption { +interface GraphNodeStatesMixin { emphasis?: ExtraEmphasisState } -interface ExtraEdgeStateOption { +interface GraphEdgeStatesMixin { emphasis?: ExtraEmphasisState } export interface GraphNodeItemOption extends SymbolOptionMixin, GraphNodeStateOption, - GraphNodeStateOption, StatesOptionMixin { + GraphNodeStateOption, StatesOptionMixin { id?: string name?: string @@ -114,7 +114,7 @@ export interface GraphEdgeStateOption { } export interface GraphEdgeItemOption extends GraphEdgeStateOption, - StatesOptionMixin, + StatesOptionMixin, GraphEdgeItemObject { value?: number @@ -130,13 +130,13 @@ export interface GraphEdgeItemOption extends } export interface GraphCategoryItemOption extends SymbolOptionMixin, - GraphNodeStateOption, StatesOptionMixin { + GraphNodeStateOption, StatesOptionMixin { name?: string value?: OptionDataValue } -export interface GraphSeriesOption extends SeriesOption, +export interface GraphSeriesOption extends SeriesOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SymbolOptionMixin, diff --git a/src/chart/heatmap/HeatmapSeries.ts b/src/chart/heatmap/HeatmapSeries.ts index 80fbb72dd4..3a785697d0 100644 --- a/src/chart/heatmap/HeatmapSeries.ts +++ b/src/chart/heatmap/HeatmapSeries.ts @@ -29,7 +29,8 @@ import { OptionDataValue, StatesOptionMixin, SeriesEncodeOptionMixin, - SeriesOnCalendarOptionMixin + SeriesOnCalendarOptionMixin, + DefaultStatesMixinEmpasis } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -45,11 +46,15 @@ export interface HeatmapStateOption { label?: SeriesLabelOption } -export interface HeatmapDataItemOption extends HeatmapStateOption, StatesOptionMixin { +interface FunnelStatesMixin { + emphasis?: DefaultStatesMixinEmpasis +} +export interface HeatmapDataItemOption extends HeatmapStateOption, + StatesOptionMixin { value: HeatmapDataValue } -export interface HeatmapSeriesOption extends SeriesOption, HeatmapStateOption, +export interface HeatmapSeriesOption extends SeriesOption, HeatmapStateOption, SeriesOnCartesianOptionMixin, SeriesOnGeoOptionMixin, SeriesOnCalendarOptionMixin, SeriesEncodeOptionMixin { type?: 'heatmap' diff --git a/src/chart/helper/LineDraw.ts b/src/chart/helper/LineDraw.ts index 60317bc7f1..5f5ff61f37 100644 --- a/src/chart/helper/LineDraw.ts +++ b/src/chart/helper/LineDraw.ts @@ -29,7 +29,8 @@ import { ZRStyleProps, StatesOptionMixin, DisplayState, - LabelOption + LabelOption, + StatesMixinBase } from '../../util/types'; import Displayable from 'zrender/src/graphic/Displayable'; import Model from '../../model/Model'; @@ -50,7 +51,8 @@ interface LineDrawStateOption { label?: LineLabelOption } -export interface LineDrawModelOption extends LineDrawStateOption, StatesOptionMixin { +export interface LineDrawModelOption extends LineDrawStateOption, + StatesOptionMixin { // If has effect effect?: { show?: boolean diff --git a/src/chart/line/LineSeries.ts b/src/chart/line/LineSeries.ts index 9114ee69f8..5c569e646a 100644 --- a/src/chart/line/LineSeries.ts +++ b/src/chart/line/LineSeries.ts @@ -45,7 +45,7 @@ import {LegendIconParams} from '../../component/legend/LegendModel'; type LineDataValue = OptionDataValue | OptionDataValue[]; -interface ExtraStateOption { +interface LineStateOptionMixin { emphasis?: { focus?: DefaultEmphasisFocus scale?: boolean @@ -59,7 +59,7 @@ export interface LineStateOption { } export interface LineDataItemOption extends SymbolOptionMixin, - LineStateOption, StatesOptionMixin { + LineStateOption, StatesOptionMixin { name?: string value?: LineDataValue @@ -70,7 +70,7 @@ export interface LineEndLabelOption extends SeriesLabelOption { } -export interface LineSeriesOption extends SeriesOption { +export interface LinesDataItemOption extends LinesStateOption, + StatesOptionMixin { name?: string fromName?: string @@ -105,8 +110,8 @@ export interface LinesDataItemOption extends LinesStateOption, StatesOptionMixin dimensions?: DimensionDefinitionLoose } -export interface LinesSeriesOption extends SeriesOption, LinesStateOption, - +export interface LinesSeriesOption + extends SeriesOption, LinesStateOption, SeriesOnCartesianOptionMixin, SeriesOnGeoOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesLargeOptionMixin { diff --git a/src/chart/map/MapSeries.ts b/src/chart/map/MapSeries.ts index 2081886e31..d146f113b8 100644 --- a/src/chart/map/MapSeries.ts +++ b/src/chart/map/MapSeries.ts @@ -32,7 +32,8 @@ import { ParsedValue, SeriesOnGeoOptionMixin, StatesOptionMixin, - SeriesLabelOption + SeriesLabelOption, + StatesMixinBase } from '../../util/types'; import { Dictionary } from 'zrender/src/core/types'; import GeoModel, { GeoCommonOptionMixin, GeoItemStyleOption } from '../../coord/geo/GeoModel'; @@ -48,7 +49,7 @@ export interface MapStateOption { itemStyle?: GeoItemStyleOption label?: SeriesLabelOption } -export interface MapDataItemOption extends MapStateOption, StatesOptionMixin, +export interface MapDataItemOption extends MapStateOption, StatesOptionMixin, OptionDataItemObject { cursor?: string } @@ -56,7 +57,7 @@ export interface MapDataItemOption extends MapStateOption, StatesOptionMixin, MapStateOption, + SeriesOption, MapStateOption, GeoCommonOptionMixin, // If `geoIndex` is not specified, a exclusive geo will be diff --git a/src/chart/parallel/ParallelSeries.ts b/src/chart/parallel/ParallelSeries.ts index c75ea4e8fd..4b44d79791 100644 --- a/src/chart/parallel/ParallelSeries.ts +++ b/src/chart/parallel/ParallelSeries.ts @@ -32,7 +32,8 @@ import { StatesOptionMixin, OptionEncodeValue, Dictionary, - OptionEncode + OptionEncode, + DefaultStatesMixinEmpasis } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -42,17 +43,20 @@ import ParallelModel from '../../coord/parallel/ParallelModel'; type ParallelSeriesDataValue = OptionDataValue[]; +interface ParallelStatesMixin { + emphasis?: DefaultStatesMixinEmpasis +} export interface ParallelStateOption { lineStyle?: LineStyleOption label?: SeriesLabelOption } -export interface ParallelSeriesDataItemOption extends ParallelStateOption, StatesOptionMixin { +export interface ParallelSeriesDataItemOption extends ParallelStateOption, + StatesOptionMixin { value?: ParallelSeriesDataValue[] } - export interface ParallelSeriesOption extends - SeriesOption, ParallelStateOption, + SeriesOption, ParallelStateOption, SeriesEncodeOptionMixin { type?: 'parallel'; diff --git a/src/chart/parallel/ParallelView.ts b/src/chart/parallel/ParallelView.ts index 1704b09c90..f3b478c401 100644 --- a/src/chart/parallel/ParallelView.ts +++ b/src/chart/parallel/ParallelView.ts @@ -172,7 +172,9 @@ function createLinePoints(data: SeriesData, dataIndex: number, dimensions: strin return points; } -function addEl(data: SeriesData, dataGroup: graphic.Group, dataIndex: number, dimensions: string[], coordSys: Parallel) { +function addEl( + data: SeriesData, dataGroup: graphic.Group, dataIndex: number, dimensions: string[], coordSys: Parallel +) { const points = createLinePoints(data, dataIndex, dimensions, coordSys); const line = new graphic.Polyline({ shape: {points: points}, diff --git a/src/chart/pie/PieSeries.ts b/src/chart/pie/PieSeries.ts index b68726285e..de283ad04f 100644 --- a/src/chart/pie/PieSeries.ts +++ b/src/chart/pie/PieSeries.ts @@ -91,7 +91,6 @@ interface ExtraStateOption { export interface PieDataItemOption extends OptionDataItemObject, PieStateOption, StatesOptionMixin { - cursor?: string } export interface PieSeriesOption extends diff --git a/src/chart/radar/RadarSeries.ts b/src/chart/radar/RadarSeries.ts index ffc8ea47d1..25829dbc5a 100644 --- a/src/chart/radar/RadarSeries.ts +++ b/src/chart/radar/RadarSeries.ts @@ -32,7 +32,8 @@ import { StatesOptionMixin, OptionDataItemObject, SeriesEncodeOptionMixin, - CallbackDataParams + CallbackDataParams, + DefaultStatesMixinEmpasis } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -43,6 +44,9 @@ import { type RadarSeriesDataValue = OptionDataValue[]; +interface RadarStatesMixin { + emphasis?: DefaultStatesMixinEmpasis +} export interface RadarSeriesStateOption { lineStyle?: LineStyleOption areaStyle?: AreaStyleOption @@ -50,11 +54,12 @@ export interface RadarSeriesStateOption { itemStyle?: ItemStyleOption } export interface RadarSeriesDataItemOption extends SymbolOptionMixin, - RadarSeriesStateOption, StatesOptionMixin, + RadarSeriesStateOption, StatesOptionMixin, OptionDataItemObject { } -export interface RadarSeriesOption extends SeriesOption, RadarSeriesStateOption, +export interface RadarSeriesOption + extends SeriesOption, RadarSeriesStateOption, SymbolOptionMixin, SeriesEncodeOptionMixin { type?: 'radar' coordinateSystem?: 'radar' diff --git a/src/chart/scatter/ScatterSeries.ts b/src/chart/scatter/ScatterSeries.ts index 40c4c73256..f2b148202d 100644 --- a/src/chart/scatter/ScatterSeries.ts +++ b/src/chart/scatter/ScatterSeries.ts @@ -47,7 +47,7 @@ interface ScatterStateOption { label?: SeriesLabelOption } -interface ExtraStateOption { +interface ScatterStatesOptionMixin { emphasis?: { focus?: DefaultEmphasisFocus scale?: boolean @@ -55,11 +55,12 @@ interface ExtraStateOption { } export interface ScatterDataItemOption extends SymbolOptionMixin, - ScatterStateOption, StatesOptionMixin, + ScatterStateOption, StatesOptionMixin, OptionDataItemObject { } -export interface ScatterSeriesOption extends SeriesOption, ScatterStateOption, +export interface ScatterSeriesOption + extends SeriesOption, ScatterStateOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SeriesLargeOptionMixin, SeriesStackOptionMixin, diff --git a/src/chart/sunburst/SunburstSeries.ts b/src/chart/sunburst/SunburstSeries.ts index f53b7c3150..afbe542d91 100644 --- a/src/chart/sunburst/SunburstSeries.ts +++ b/src/chart/sunburst/SunburstSeries.ts @@ -65,7 +65,7 @@ interface SunburstDataParams extends CallbackDataParams { }[] } -interface ExtraStateOption { +interface SunburstStatesMixin { emphasis?: { focus?: DefaultEmphasisFocus | 'descendant' | 'ancestor' } @@ -77,7 +77,7 @@ export interface SunburstStateOption { } export interface SunburstSeriesNodeItemOption extends - SunburstStateOption, StatesOptionMixin, + SunburstStateOption, StatesOptionMixin, OptionDataItemObject { nodeClick?: 'rootToNode' | 'link' @@ -91,7 +91,8 @@ export interface SunburstSeriesNodeItemOption extends cursor?: string } -export interface SunburstSeriesLevelOption extends SunburstStateOption, StatesOptionMixin { +export interface SunburstSeriesLevelOption + extends SunburstStateOption, StatesOptionMixin { highlight?: { itemStyle?: SunburstItemStyleOption label?: SunburstLabelOption @@ -105,7 +106,7 @@ interface SortParam { getValue(): number } export interface SunburstSeriesOption extends - SeriesOption, SunburstStateOption, + SeriesOption, SunburstStateOption, SunburstColorByMixin, CircleLayoutOptionMixin { diff --git a/src/chart/tree/TreeSeries.ts b/src/chart/tree/TreeSeries.ts index 118ffb2fad..c51181f61a 100644 --- a/src/chart/tree/TreeSeries.ts +++ b/src/chart/tree/TreeSeries.ts @@ -53,7 +53,7 @@ export interface TreeSeriesStateOption { label?: SeriesLabelOption } -interface ExtraStateOption { +interface TreeStatesMixin { emphasis?: { focus?: DefaultEmphasisFocus | 'ancestor' | 'descendant' scale?: boolean @@ -61,7 +61,7 @@ interface ExtraStateOption { } export interface TreeSeriesNodeItemOption extends SymbolOptionMixin, - TreeSeriesStateOption, StatesOptionMixin, + TreeSeriesStateOption, StatesOptionMixin, OptionDataItemObject { children?: TreeSeriesNodeItemOption[] @@ -75,12 +75,12 @@ export interface TreeSeriesNodeItemOption extends SymbolOptionMixin { - +export interface TreeSeriesLeavesOption + extends TreeSeriesStateOption, StatesOptionMixin { } export interface TreeSeriesOption extends - SeriesOption, TreeSeriesStateOption, + SeriesOption, TreeSeriesStateOption, SymbolOptionMixin, BoxLayoutOptionMixin, RoamOptionMixin { type?: 'tree' diff --git a/src/component/marker/MarkAreaModel.ts b/src/component/marker/MarkAreaModel.ts index 9136c66bda..ec2a651ffc 100644 --- a/src/component/marker/MarkAreaModel.ts +++ b/src/component/marker/MarkAreaModel.ts @@ -18,7 +18,7 @@ */ import MarkerModel, { MarkerOption, MarkerStatisticType, MarkerPositionOption } from './MarkerModel'; -import { SeriesLabelOption, ItemStyleOption, StatesOptionMixin } from '../../util/types'; +import { SeriesLabelOption, ItemStyleOption, StatesOptionMixin, StatesMixinBase } from '../../util/types'; import GlobalModel from '../../model/Global'; @@ -27,7 +27,8 @@ interface MarkAreaStateOption { label?: SeriesLabelOption } -interface MarkAreaDataItemOptionBase extends MarkAreaStateOption, StatesOptionMixin { +interface MarkAreaDataItemOptionBase extends MarkAreaStateOption, + StatesOptionMixin { name?: string } @@ -55,7 +56,8 @@ export type MarkArea2DDataItemOption = [ MarkArea2DDataItemDimOption ]; -export interface MarkAreaOption extends MarkerOption, MarkAreaStateOption, StatesOptionMixin { +export interface MarkAreaOption extends MarkerOption, MarkAreaStateOption, + StatesOptionMixin { mainType?: 'markArea' precision?: number diff --git a/src/component/marker/MarkLineModel.ts b/src/component/marker/MarkLineModel.ts index 0c27667345..9cde9e024d 100644 --- a/src/component/marker/MarkLineModel.ts +++ b/src/component/marker/MarkLineModel.ts @@ -24,7 +24,8 @@ import { SeriesLineLabelOption, SymbolOptionMixin, ItemStyleOption, - StatesOptionMixin + StatesOptionMixin, + StatesMixinBase } from '../../util/types'; interface MarkLineStateOption { @@ -35,7 +36,8 @@ interface MarkLineStateOption { itemStyle?: ItemStyleOption label?: SeriesLineLabelOption } -interface MarkLineDataItemOptionBase extends MarkLineStateOption, StatesOptionMixin { +interface MarkLineDataItemOptionBase extends MarkLineStateOption, + StatesOptionMixin { name?: string } @@ -79,7 +81,8 @@ export type MarkLine2DDataItemOption = [ ]; export interface MarkLineOption extends MarkerOption, - MarkLineStateOption, StatesOptionMixin { + MarkLineStateOption, + StatesOptionMixin { mainType?: 'markLine' symbol?: string[] | string diff --git a/src/component/marker/MarkPointModel.ts b/src/component/marker/MarkPointModel.ts index db5f1663eb..3fef1b30db 100644 --- a/src/component/marker/MarkPointModel.ts +++ b/src/component/marker/MarkPointModel.ts @@ -24,7 +24,8 @@ import { ItemStyleOption, SeriesLabelOption, CallbackDataParams, - StatesOptionMixin + StatesOptionMixin, + StatesMixinBase } from '../../util/types'; // interface MarkPointCallbackDataParams extends CallbackDataParams { @@ -37,7 +38,7 @@ interface MarkPointStateOption { label?: SeriesLabelOption } export interface MarkPointDataItemOption extends - MarkPointStateOption, StatesOptionMixin, + MarkPointStateOption, StatesOptionMixin, // TODO should not support callback in data SymbolOptionMixin, MarkerPositionOption { @@ -46,7 +47,7 @@ export interface MarkPointDataItemOption extends export interface MarkPointOption extends MarkerOption, SymbolOptionMixin, - StatesOptionMixin, MarkPointStateOption { + StatesOptionMixin, MarkPointStateOption { mainType?: 'markPoint' precision?: number diff --git a/src/coord/axisCommonTypes.ts b/src/coord/axisCommonTypes.ts index 3fe8999d98..0997f6716e 100644 --- a/src/coord/axisCommonTypes.ts +++ b/src/coord/axisCommonTypes.ts @@ -169,9 +169,6 @@ interface AxisTickOption { // The length of axisTick. length?: number, lineStyle?: LineStyleOption - - // -------------------------------------------- - // [Properties below only for 'category' axis]: } type AxisLabelValueFormatter = (value: number, index: number) => string; diff --git a/src/coord/geo/GeoModel.ts b/src/coord/geo/GeoModel.ts index f65553ca02..4f89d40b29 100644 --- a/src/coord/geo/GeoModel.ts +++ b/src/coord/geo/GeoModel.ts @@ -35,7 +35,8 @@ import { AnimationOptionMixin, StatesOptionMixin, Dictionary, - CommonTooltipOption + CommonTooltipOption, + StatesMixinBase } from '../../util/types'; import { NameMap } from './geoTypes'; import GlobalModel from '../../model/Global'; @@ -58,7 +59,7 @@ interface GeoLabelFormatterDataParams { status: DisplayState; } -export interface RegoinOption extends GeoStateOption, StatesOptionMixin { +export interface RegoinOption extends GeoStateOption, StatesOptionMixin { name?: string selected?: boolean tooltip?: CommonTooltipOption @@ -102,7 +103,7 @@ export interface GeoOption extends // For lens animation on geo. AnimationOptionMixin, GeoCommonOptionMixin, - StatesOptionMixin, GeoStateOption { + StatesOptionMixin, GeoStateOption { mainType?: 'geo'; show?: boolean; diff --git a/src/label/labelGuideHelper.ts b/src/label/labelGuideHelper.ts index ce53732d7b..c9a4b5bdb2 100644 --- a/src/label/labelGuideHelper.ts +++ b/src/label/labelGuideHelper.ts @@ -661,7 +661,7 @@ export function setLabelLineStyle( export function getLabelLineStatesModels( - itemModel: Model & Partial>>, + itemModel: Model & Partial>>, labelLineName?: LabelName ): Record { labelLineName = (labelLineName || 'labelLine') as LabelName; diff --git a/src/label/labelStyle.ts b/src/label/labelStyle.ts index e63a35117e..eb601ed5f9 100644 --- a/src/label/labelStyle.ts +++ b/src/label/labelStyle.ts @@ -293,7 +293,7 @@ function setLabelStyle( export { setLabelStyle }; export function getLabelStatesModels( - itemModel: Model & Partial>>, + itemModel: Model & Partial>>, labelName?: LabelName ): Record { labelName = (labelName || 'label') as LabelName; diff --git a/src/util/types.ts b/src/util/types.ts index 1686e56d45..a484f425bd 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -965,6 +965,10 @@ export interface ItemStyleOption extends ShadowOptionMixin, BorderOptionMixin { decal?: DecalObject | 'none' } +export interface SeriesItemStyleOption extends Omit { + color?: ZRColor | ((params: TParams) => string) +} + /** * ItemStyleOption is a option set to control styles on lines. * Used in the components or series like `line`, `axis` @@ -1499,15 +1503,16 @@ export type BlurScope = 'coordinateSystem' | 'series' | 'global'; */ export type InnerFocus = DefaultEmphasisFocus | ArrayLike | Dictionary>; -export interface DefaultExtraStateOpts { - emphasis: any - select: any - blur: any +export interface DefaultStatesMixin { + // FIXME + emphasis?: any + select?: any + blur?: any } export type DefaultEmphasisFocus = 'none' | 'self' | 'series'; -export interface DefaultExtraEmpasisState { +export interface DefaultStatesMixinEmpasis { /** * self: Focus self and blur all others. * series: Focus series and blur all other series. @@ -1515,19 +1520,20 @@ export interface DefaultExtraEmpasisState { focus?: DefaultEmphasisFocus } -interface ExtraStateOptsBase { - emphasis?: { - focus?: string - }, - select?: any - blur?: any +export interface StatesMixinBase { + emphasis?: unknown + select?: unknown + blur?: unknown } -export interface StatesOptionMixin { +export interface StatesOptionMixin< + StateOption, + StatesMixin extends StatesMixinBase +> { /** * Emphasis states */ - emphasis?: StateOption & ExtraStateOpts['emphasis'] & { + emphasis?: StateOption & StatesMixin['emphasis'] & { /** * Scope of blurred element when focus. * @@ -1542,11 +1548,11 @@ export interface StatesOptionMixin extends + StateOption = unknown, + StatesMixin extends StatesMixinBase = DefaultStatesMixin +> extends ComponentOption, AnimationOptionMixin, ColorPaletteOptionMixin, - StatesOptionMixin + StatesOptionMixin { mainType?: 'series' diff --git a/test/types/basic.ts b/test/types/basic.ts index 19bfa6761f..fd39e4d0f4 100644 --- a/test/types/basic.ts +++ b/test/types/basic.ts @@ -26,7 +26,12 @@ const chart: echarts.EChartsType = echarts.init(dom); const option: echarts.EChartsOption = { series: [{ - type: 'bar' + type: 'bar', + emphasis: { + itemStyle: { + color: 'red' + } + } }] }; chart.setOption(option); \ No newline at end of file From 0779757dd37bbda7598754b963138425ac3ce592 Mon Sep 17 00:00:00 2001 From: pissang Date: Thu, 9 Sep 2021 10:16:40 +0800 Subject: [PATCH 4/9] fix(type): fix callback type in itemStyle.color #14279 --- src/chart/bar/BarSeries.ts | 13 ++++++++----- src/chart/boxplot/BoxplotSeries.ts | 12 +++++++----- .../effectScatter/EffectScatterSeries.ts | 7 ++++--- src/chart/funnel/FunnelSeries.ts | 18 ++++++++++++------ src/chart/gauge/GaugeSeries.ts | 12 +++++++----- src/chart/graph/GraphSeries.ts | 9 +++++---- src/chart/heatmap/HeatmapSeries.ts | 19 ++++++++++++++----- src/chart/line/LineSeries.ts | 8 ++++---- src/chart/lines/LinesSeries.ts | 14 ++++++++------ src/chart/map/MapSeries.ts | 14 ++++++++------ src/chart/parallel/ParallelSeries.ts | 16 ++++++++-------- src/chart/pie/PieSeries.ts | 17 +++++++++++------ src/chart/radar/RadarSeries.ts | 10 ++++++---- src/chart/sankey/SankeySeries.ts | 13 +++++++------ src/chart/scatter/ScatterSeries.ts | 7 ++++--- src/chart/sunburst/SunburstSeries.ts | 9 +++++---- src/chart/themeRiver/ThemeRiverSeries.ts | 15 +++++++++++---- src/chart/tree/TreeSeries.ts | 7 ++++--- src/chart/treemap/TreemapSeries.ts | 13 ++++++------- src/coord/geo/GeoModel.ts | 2 +- src/util/types.ts | 18 +++++++----------- 21 files changed, 147 insertions(+), 106 deletions(-) diff --git a/src/chart/bar/BarSeries.ts b/src/chart/bar/BarSeries.ts index 57323c5368..d2b76ab3a7 100644 --- a/src/chart/bar/BarSeries.ts +++ b/src/chart/bar/BarSeries.ts @@ -27,7 +27,8 @@ import { SeriesSamplingOptionMixin, SeriesLabelOption, SeriesEncodeOptionMixin, - DefaultStatesMixinEmpasis + DefaultStatesMixinEmpasis, + CallbackDataParams } from '../../util/types'; import type Cartesian2D from '../../coord/cartesian/Cartesian2D'; import createSeriesData from '../helper/createSeriesData'; @@ -42,8 +43,8 @@ export type PolarBarLabelPosition = SeriesLabelOption['position'] export type BarSeriesLabelOption = Omit & {position?: PolarBarLabelPosition | 'outside'}; -export interface BarStateOption { - itemStyle?: BarItemStyleOption +export interface BarStateOption { + itemStyle?: BarItemStyleOption label?: BarSeriesLabelOption } @@ -51,7 +52,7 @@ interface BarStatesMixin { emphasis?: DefaultStatesMixinEmpasis } -export interface BarItemStyleOption extends ItemStyleOption { +export interface BarItemStyleOption extends ItemStyleOption { // Border radius is not supported for bar on polar borderRadius?: number | number[] } @@ -61,7 +62,9 @@ export interface BarDataItemOption extends BarStateOption, cursor?: string } -export interface BarSeriesOption extends BaseBarSeriesOption, BarStateOption, +export interface BarSeriesOption + extends BaseBarSeriesOption, BarStatesMixin>, + BarStateOption, SeriesStackOptionMixin, SeriesSamplingOptionMixin, SeriesEncodeOptionMixin { type?: 'bar' diff --git a/src/chart/boxplot/BoxplotSeries.ts b/src/chart/boxplot/BoxplotSeries.ts index 60cbc41871..b87276b39b 100644 --- a/src/chart/boxplot/BoxplotSeries.ts +++ b/src/chart/boxplot/BoxplotSeries.ts @@ -28,7 +28,8 @@ import { OptionDataValueNumeric, StatesOptionMixin, SeriesEncodeOptionMixin, - DefaultEmphasisFocus + DefaultEmphasisFocus, + CallbackDataParams } from '../../util/types'; import type Axis2D from '../../coord/cartesian/Axis2D'; import Cartesian2D from '../../coord/cartesian/Cartesian2D'; @@ -37,9 +38,8 @@ import { mixin } from 'zrender/src/core/util'; // [min, Q1, median (or Q2), Q3, max] type BoxplotDataValue = OptionDataValueNumeric[]; - -export interface BoxplotStateOption { - itemStyle?: ItemStyleOption +export interface BoxplotStateOption { + itemStyle?: ItemStyleOption label?: SeriesLabelOption } @@ -55,7 +55,9 @@ interface ExtraStateOption { } } -export interface BoxplotSeriesOption extends SeriesOption, BoxplotStateOption, +export interface BoxplotSeriesOption + extends SeriesOption, ExtraStateOption>, + BoxplotStateOption, SeriesOnCartesianOptionMixin, SeriesEncodeOptionMixin { type?: 'boxplot' diff --git a/src/chart/effectScatter/EffectScatterSeries.ts b/src/chart/effectScatter/EffectScatterSeries.ts index 8e936b3eea..19a468c5c1 100644 --- a/src/chart/effectScatter/EffectScatterSeries.ts +++ b/src/chart/effectScatter/EffectScatterSeries.ts @@ -48,8 +48,8 @@ interface EffectScatterStatesOptionMixin { scale?: boolean } } -export interface EffectScatterStateOption { - itemStyle?: ItemStyleOption +export interface EffectScatterStateOption { + itemStyle?: ItemStyleOption label?: SeriesLabelOption } @@ -64,7 +64,8 @@ export interface EffectScatterDataItemOption extends SymbolOptionMixin, } export interface EffectScatterSeriesOption - extends SeriesOption, EffectScatterStateOption, + extends SeriesOption, EffectScatterStatesOptionMixin>, + EffectScatterStateOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SymbolOptionMixin, SeriesEncodeOptionMixin { diff --git a/src/chart/funnel/FunnelSeries.ts b/src/chart/funnel/FunnelSeries.ts index 8ac6fcf4c2..f102f793cb 100644 --- a/src/chart/funnel/FunnelSeries.ts +++ b/src/chart/funnel/FunnelSeries.ts @@ -37,7 +37,8 @@ import { VerticalAlign, SeriesLabelOption, SeriesEncodeOptionMixin, - DefaultStatesMixinEmpasis + DefaultStatesMixinEmpasis, + CallbackDataParams } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -51,8 +52,11 @@ interface FunnelStatesMixin { emphasis?: DefaultStatesMixinEmpasis } -export interface FunnelStateOption { - itemStyle?: ItemStyleOption +export interface FunnelCallbackDataParams extends CallbackDataParams { + percent: number +} +export interface FunnelStateOption { + itemStyle?: ItemStyleOption label?: FunnelLabelOption labelLine?: LabelLineOption } @@ -67,7 +71,9 @@ export interface FunnelDataItemOption } } -export interface FunnelSeriesOption extends SeriesOption, FunnelStateOption, +export interface FunnelSeriesOption + extends SeriesOption, FunnelStatesMixin>, + FunnelStateOption, BoxLayoutOptionMixin, SeriesEncodeOptionMixin { type?: 'funnel' @@ -128,9 +134,9 @@ class FunnelSeriesModel extends SeriesModel { } // Overwrite - getDataParams(dataIndex: number) { + getDataParams(dataIndex: number): FunnelCallbackDataParams { const data = this.getData(); - const params = super.getDataParams(dataIndex); + const params = super.getDataParams(dataIndex) as FunnelCallbackDataParams; const valueDim = data.mapDimension('value'); const sum = data.getSum(valueDim); // Percent is 0 if sum is 0 diff --git a/src/chart/gauge/GaugeSeries.ts b/src/chart/gauge/GaugeSeries.ts index b861bf708c..c444a6e082 100644 --- a/src/chart/gauge/GaugeSeries.ts +++ b/src/chart/gauge/GaugeSeries.ts @@ -29,7 +29,8 @@ import { OptionDataValueNumeric, StatesOptionMixin, SeriesEncodeOptionMixin, - DefaultStatesMixinEmpasis + DefaultStatesMixinEmpasis, + CallbackDataParams } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -106,12 +107,12 @@ interface DetailOption extends LabelOption { interface GaugeStatesMixin { emphasis?: DefaultStatesMixinEmpasis } -export interface GaugeStateOption { - itemStyle?: ItemStyleOption +export interface GaugeStateOption { + itemStyle?: ItemStyleOption } export interface GaugeDataItemOption extends GaugeStateOption, - StatesOptionMixin { + StatesOptionMixin, GaugeStatesMixin> { name?: string value?: OptionDataValueNumeric pointer?: PointerOption @@ -119,7 +120,8 @@ export interface GaugeDataItemOption extends GaugeStateOption, title?: TitleOption detail?: DetailOption } -export interface GaugeSeriesOption extends SeriesOption, GaugeStateOption, +export interface GaugeSeriesOption extends SeriesOption, + GaugeStateOption, CircleLayoutOptionMixin, SeriesEncodeOptionMixin { type?: 'gauge' diff --git a/src/chart/graph/GraphSeries.ts b/src/chart/graph/GraphSeries.ts index eb034015d9..a3241c0951 100644 --- a/src/chart/graph/GraphSeries.ts +++ b/src/chart/graph/GraphSeries.ts @@ -62,8 +62,8 @@ interface GraphEdgeLineStyleOption extends LineStyleOption { curveness?: number } -export interface GraphNodeStateOption { - itemStyle?: ItemStyleOption +export interface GraphNodeStateOption { + itemStyle?: ItemStyleOption label?: SeriesLabelOption } @@ -136,7 +136,8 @@ export interface GraphCategoryItemOption extends SymbolOptionMixin, value?: OptionDataValue } -export interface GraphSeriesOption extends SeriesOption, +export interface GraphSeriesOption + extends SeriesOption, GraphNodeStatesMixin>, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SymbolOptionMixin, @@ -177,7 +178,7 @@ export interface GraphSeriesOption extends SeriesOption lineStyle?: GraphEdgeLineStyleOption emphasis?: { diff --git a/src/chart/heatmap/HeatmapSeries.ts b/src/chart/heatmap/HeatmapSeries.ts index 3a785697d0..7fcd89f918 100644 --- a/src/chart/heatmap/HeatmapSeries.ts +++ b/src/chart/heatmap/HeatmapSeries.ts @@ -30,7 +30,8 @@ import { StatesOptionMixin, SeriesEncodeOptionMixin, SeriesOnCalendarOptionMixin, - DefaultStatesMixinEmpasis + DefaultStatesMixinEmpasis, + CallbackDataParams } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -40,9 +41,9 @@ import type Calendar from '../../coord/calendar/Calendar'; type HeatmapDataValue = OptionDataValue[]; -export interface HeatmapStateOption { +export interface HeatmapStateOption { // Available on cartesian2d coordinate system - itemStyle?: ItemStyleOption + itemStyle?: ItemStyleOption label?: SeriesLabelOption } @@ -54,8 +55,14 @@ export interface HeatmapDataItemOption extends HeatmapStateOption, value: HeatmapDataValue } -export interface HeatmapSeriesOption extends SeriesOption, HeatmapStateOption, - SeriesOnCartesianOptionMixin, SeriesOnGeoOptionMixin, SeriesOnCalendarOptionMixin, SeriesEncodeOptionMixin { +export interface HeatmapSeriesOption + extends SeriesOption, FunnelStatesMixin>, + HeatmapStateOption, + SeriesOnCartesianOptionMixin, + SeriesOnGeoOptionMixin, + SeriesOnCalendarOptionMixin, + SeriesEncodeOptionMixin { + type?: 'heatmap' coordinateSystem?: 'cartesian2d' | 'geo' | 'calendar' @@ -69,6 +76,8 @@ export interface HeatmapSeriesOption extends SeriesOption { static readonly type = 'series.heatmap'; readonly type = HeatmapSeriesModel.type; diff --git a/src/chart/line/LineSeries.ts b/src/chart/line/LineSeries.ts index 5c569e646a..1b572b5a20 100644 --- a/src/chart/line/LineSeries.ts +++ b/src/chart/line/LineSeries.ts @@ -52,8 +52,8 @@ interface LineStateOptionMixin { } } -export interface LineStateOption { - itemStyle?: ItemStyleOption +export interface LineStateOption { + itemStyle?: ItemStyleOption label?: SeriesLabelOption endLabel?: LineEndLabelOption } @@ -70,7 +70,7 @@ export interface LineEndLabelOption extends SeriesLabelOption { } -export interface LineSeriesOption extends SeriesOption, LineStateOptionMixin & { emphasis?: { lineStyle?: LineStyleOption | { width?: 'bolder' @@ -81,7 +81,7 @@ export interface LineSeriesOption extends SeriesOption, LineStateOption, +}>, LineStateOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesStackOptionMixin, diff --git a/src/chart/lines/LinesSeries.ts b/src/chart/lines/LinesSeries.ts index 61e4d444c9..b762fe1c9e 100644 --- a/src/chart/lines/LinesSeries.ts +++ b/src/chart/lines/LinesSeries.ts @@ -35,7 +35,9 @@ import { StatesOptionMixin, SeriesLineLabelOption, DimensionDefinitionLoose, - DefaultStatesMixinEmpasis + DefaultStatesMixinEmpasis, + ZRColor, + CallbackDataParams } from '../../util/types'; import GlobalModel from '../../model/Global'; import type { LineDrawModelOption } from '../helper/LineDraw'; @@ -73,7 +75,7 @@ type LinesCoords = number[][]; type LinesValue = OptionDataValue | OptionDataValue[]; -interface LinesLineStyleOption extends LineStyleOption { +interface LinesLineStyleOption extends LineStyleOption { curveness?: number } @@ -86,13 +88,13 @@ interface LegacyDataItemOption { interface LinesStatesMixin { emphasis?: DefaultStatesMixinEmpasis } -export interface LinesStateOption { - lineStyle?: LinesLineStyleOption +export interface LinesStateOption { + lineStyle?: LinesLineStyleOption ZRColor> label?: SeriesLineLabelOption } -export interface LinesDataItemOption extends LinesStateOption, - StatesOptionMixin { +export interface LinesDataItemOption extends LinesStateOption, + StatesOptionMixin, LinesStatesMixin> { name?: string fromName?: string diff --git a/src/chart/map/MapSeries.ts b/src/chart/map/MapSeries.ts index d146f113b8..4aab23a2f7 100644 --- a/src/chart/map/MapSeries.ts +++ b/src/chart/map/MapSeries.ts @@ -33,7 +33,8 @@ import { SeriesOnGeoOptionMixin, StatesOptionMixin, SeriesLabelOption, - StatesMixinBase + StatesMixinBase, + CallbackDataParams } from '../../util/types'; import { Dictionary } from 'zrender/src/core/types'; import GeoModel, { GeoCommonOptionMixin, GeoItemStyleOption } from '../../coord/geo/GeoModel'; @@ -45,11 +46,12 @@ import {createSymbol, ECSymbol} from '../../util/symbol'; import {LegendIconParams} from '../../component/legend/LegendModel'; import {Group} from '../../util/graphic'; -export interface MapStateOption { - itemStyle?: GeoItemStyleOption +export interface MapStateOption { + itemStyle?: GeoItemStyleOption label?: SeriesLabelOption } -export interface MapDataItemOption extends MapStateOption, StatesOptionMixin, +export interface MapDataItemOption extends MapStateOption, + StatesOptionMixin, OptionDataItemObject { cursor?: string } @@ -57,8 +59,8 @@ export interface MapDataItemOption extends MapStateOption, StatesOptionMixin, MapStateOption, - + SeriesOption, StatesMixinBase>, + MapStateOption, GeoCommonOptionMixin, // If `geoIndex` is not specified, a exclusive geo will be // created. Otherwise use the specified geo component, and diff --git a/src/chart/parallel/ParallelSeries.ts b/src/chart/parallel/ParallelSeries.ts index 4b44d79791..9a8f68e67a 100644 --- a/src/chart/parallel/ParallelSeries.ts +++ b/src/chart/parallel/ParallelSeries.ts @@ -33,7 +33,9 @@ import { OptionEncodeValue, Dictionary, OptionEncode, - DefaultStatesMixinEmpasis + DefaultStatesMixinEmpasis, + ZRColor, + CallbackDataParams } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -46,8 +48,8 @@ type ParallelSeriesDataValue = OptionDataValue[]; interface ParallelStatesMixin { emphasis?: DefaultStatesMixinEmpasis } -export interface ParallelStateOption { - lineStyle?: LineStyleOption +export interface ParallelStateOption { + lineStyle?: LineStyleOption ZRColor> label?: SeriesLabelOption } @@ -56,7 +58,8 @@ export interface ParallelSeriesDataItemOption extends ParallelStateOption, value?: ParallelSeriesDataValue[] } export interface ParallelSeriesOption extends - SeriesOption, ParallelStateOption, + SeriesOption, ParallelStatesMixin>, + ParallelStateOption, SeriesEncodeOptionMixin { type?: 'parallel'; @@ -74,14 +77,11 @@ export interface ParallelSeriesOption extends parallelAxisDefault?: ParallelAxisOption; - emphasis?: { - label?: SeriesLabelOption; - lineStyle?: LineStyleOption; - } data?: (ParallelSeriesDataValue | ParallelSeriesDataItemOption)[] } + class ParallelSeriesModel extends SeriesModel { static type = 'series.parallel'; diff --git a/src/chart/pie/PieSeries.ts b/src/chart/pie/PieSeries.ts index de283ad04f..efa5bda315 100644 --- a/src/chart/pie/PieSeries.ts +++ b/src/chart/pie/PieSeries.ts @@ -40,7 +40,7 @@ import { } from '../../util/types'; import SeriesData from '../../data/SeriesData'; -interface PieItemStyleOption extends ItemStyleOption { +interface PieItemStyleOption extends ItemStyleOption { // can be 10 // which means that both innerCornerRadius and outerCornerRadius are 10 // can also be an array [20, 10] @@ -52,9 +52,13 @@ interface PieItemStyleOption extends ItemStyleOption { borderRadius?: (number | string)[] | number | string } -export interface PieStateOption { +export interface PieCallbackDataParams extends CallbackDataParams { + percent: number +} + +export interface PieStateOption { // TODO: TYPE Color Callback - itemStyle?: PieItemStyleOption + itemStyle?: PieItemStyleOption label?: PieLabelOption labelLine?: PieLabelLineOption } @@ -94,7 +98,8 @@ export interface PieDataItemOption extends cursor?: string } export interface PieSeriesOption extends - Omit, 'labelLine'>, PieStateOption, + Omit, ExtraStateOption>, 'labelLine'>, + PieStateOption, CircleLayoutOptionMixin, BoxLayoutOptionMixin, SeriesEncodeOptionMixin { @@ -163,9 +168,9 @@ class PieSeriesModel extends SeriesModel { /** * @overwrite */ - getDataParams(dataIndex: number): CallbackDataParams { + getDataParams(dataIndex: number): PieCallbackDataParams { const data = this.getData(); - const params = super.getDataParams(dataIndex); + const params = super.getDataParams(dataIndex) as PieCallbackDataParams; // FIXME toFixed? const valueList: number[] = []; diff --git a/src/chart/radar/RadarSeries.ts b/src/chart/radar/RadarSeries.ts index 25829dbc5a..c6f9bc5f62 100644 --- a/src/chart/radar/RadarSeries.ts +++ b/src/chart/radar/RadarSeries.ts @@ -47,19 +47,21 @@ type RadarSeriesDataValue = OptionDataValue[]; interface RadarStatesMixin { emphasis?: DefaultStatesMixinEmpasis } -export interface RadarSeriesStateOption { +export interface RadarSeriesStateOption { lineStyle?: LineStyleOption areaStyle?: AreaStyleOption label?: SeriesLabelOption - itemStyle?: ItemStyleOption + itemStyle?: ItemStyleOption } export interface RadarSeriesDataItemOption extends SymbolOptionMixin, - RadarSeriesStateOption, StatesOptionMixin, + RadarSeriesStateOption, + StatesOptionMixin, RadarStatesMixin>, OptionDataItemObject { } export interface RadarSeriesOption - extends SeriesOption, RadarSeriesStateOption, + extends SeriesOption, + RadarSeriesStateOption, SymbolOptionMixin, SeriesEncodeOptionMixin { type?: 'radar' coordinateSystem?: 'radar' diff --git a/src/chart/sankey/SankeySeries.ts b/src/chart/sankey/SankeySeries.ts index 6131f56e1a..0479035203 100644 --- a/src/chart/sankey/SankeySeries.ts +++ b/src/chart/sankey/SankeySeries.ts @@ -33,7 +33,8 @@ import { OptionDataItemObject, GraphEdgeItemObject, OptionDataValueNumeric, - DefaultEmphasisFocus + DefaultEmphasisFocus, + CallbackDataParams } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; @@ -43,17 +44,16 @@ import { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup'; type FocusNodeAdjacency = boolean | 'inEdges' | 'outEdges' | 'allEdges'; -export interface SankeyNodeStateOption { +export interface SankeyNodeStateOption { label?: SeriesLabelOption - itemStyle?: ItemStyleOption + itemStyle?: ItemStyleOption } export interface SankeyEdgeStateOption { lineStyle?: SankeyEdgeStyleOption } -interface SankeyBothStateOption extends SankeyNodeStateOption, SankeyEdgeStateOption { -} +interface SankeyBothStateOption extends SankeyNodeStateOption, SankeyEdgeStateOption {} interface SankeyEdgeStyleOption extends LineStyleOption { curveness?: number @@ -92,7 +92,8 @@ export interface SankeyLevelOption extends SankeyNodeStateOption, SankeyEdgeStat } export interface SankeySeriesOption - extends SeriesOption, SankeyBothStateOption, + extends SeriesOption, ExtraStateOption>, + SankeyBothStateOption, BoxLayoutOptionMixin { type?: 'sankey' diff --git a/src/chart/scatter/ScatterSeries.ts b/src/chart/scatter/ScatterSeries.ts index f2b148202d..f79f42281e 100644 --- a/src/chart/scatter/ScatterSeries.ts +++ b/src/chart/scatter/ScatterSeries.ts @@ -42,8 +42,8 @@ import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; -interface ScatterStateOption { - itemStyle?: ItemStyleOption +interface ScatterStateOption { + itemStyle?: ItemStyleOption label?: SeriesLabelOption } @@ -60,7 +60,8 @@ export interface ScatterDataItemOption extends SymbolOptionMixin, } export interface ScatterSeriesOption - extends SeriesOption, ScatterStateOption, + extends SeriesOption, ScatterStatesOptionMixin>, + ScatterStateOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SeriesLargeOptionMixin, SeriesStackOptionMixin, diff --git a/src/chart/sunburst/SunburstSeries.ts b/src/chart/sunburst/SunburstSeries.ts index afbe542d91..f7d801c0a9 100644 --- a/src/chart/sunburst/SunburstSeries.ts +++ b/src/chart/sunburst/SunburstSeries.ts @@ -38,7 +38,7 @@ import SeriesData from '../../data/SeriesData'; import Model from '../../model/Model'; import enableAriaDecalForTree from '../helper/enableAriaDecalForTree'; -interface SunburstItemStyleOption extends ItemStyleOption { +interface SunburstItemStyleOption extends ItemStyleOption { // can be 10 // which means that both innerCornerRadius and outerCornerRadius are 10 // can also be an array [20, 10] @@ -71,13 +71,14 @@ interface SunburstStatesMixin { } } -export interface SunburstStateOption { - itemStyle?: SunburstItemStyleOption +export interface SunburstStateOption { + itemStyle?: SunburstItemStyleOption label?: SunburstLabelOption } export interface SunburstSeriesNodeItemOption extends - SunburstStateOption, StatesOptionMixin, + SunburstStateOption, + StatesOptionMixin, SunburstStatesMixin>, OptionDataItemObject { nodeClick?: 'rootToNode' | 'link' diff --git a/src/chart/themeRiver/ThemeRiverSeries.ts b/src/chart/themeRiver/ThemeRiverSeries.ts index 4cd6c57fa2..2e05a9a826 100644 --- a/src/chart/themeRiver/ThemeRiverSeries.ts +++ b/src/chart/themeRiver/ThemeRiverSeries.ts @@ -33,7 +33,9 @@ import { BoxLayoutOptionMixin, ZRColor, Dictionary, - SeriesLabelOption + SeriesLabelOption, + CallbackDataParams, + DefaultStatesMixinEmpasis } from '../../util/types'; import SingleAxis from '../../coord/single/SingleAxis'; import GlobalModel from '../../model/Global'; @@ -48,12 +50,17 @@ interface ThemeRiverSeriesLabelOption extends SeriesLabelOption { type ThemerRiverDataItem = [OptionDataValueDate, OptionDataValueNumeric, string]; -export interface ThemeRiverStateOption { +interface ThemeRiverStatesMixin { + emphasis?: DefaultStatesMixinEmpasis +} +export interface ThemeRiverStateOption { label?: ThemeRiverSeriesLabelOption - itemStyle?: ItemStyleOption + itemStyle?: ItemStyleOption } -export interface ThemeRiverSeriesOption extends SeriesOption, ThemeRiverStateOption, +export interface ThemeRiverSeriesOption + extends SeriesOption, ThemeRiverStatesMixin>, + ThemeRiverStateOption, SeriesOnSingleOptionMixin, BoxLayoutOptionMixin { type?: 'themeRiver' diff --git a/src/chart/tree/TreeSeries.ts b/src/chart/tree/TreeSeries.ts index c51181f61a..5d7b8f5ef4 100644 --- a/src/chart/tree/TreeSeries.ts +++ b/src/chart/tree/TreeSeries.ts @@ -44,8 +44,8 @@ interface CurveLineStyleOption extends LineStyleOption{ curveness?: number } -export interface TreeSeriesStateOption { - itemStyle?: ItemStyleOption +export interface TreeSeriesStateOption { + itemStyle?: ItemStyleOption /** * Line style of the edge between node and it's parent. */ @@ -61,7 +61,8 @@ interface TreeStatesMixin { } export interface TreeSeriesNodeItemOption extends SymbolOptionMixin, - TreeSeriesStateOption, StatesOptionMixin, + TreeSeriesStateOption, + StatesOptionMixin, TreeStatesMixin>, OptionDataItemObject { children?: TreeSeriesNodeItemOption[] diff --git a/src/chart/treemap/TreemapSeries.ts b/src/chart/treemap/TreemapSeries.ts index 287540e9c4..043018c671 100644 --- a/src/chart/treemap/TreemapSeries.ts +++ b/src/chart/treemap/TreemapSeries.ts @@ -36,8 +36,7 @@ import { DecalObject, SeriesLabelOption, DefaultEmphasisFocus, - AriaOptionMixin, - ColorBy + AriaOptionMixin } from '../../util/types'; import GlobalModel from '../../model/Global'; import { LayoutRect } from '../../util/layout'; @@ -59,7 +58,7 @@ interface TreemapSeriesLabelOption extends SeriesLabelOption { formatter?: string | ((params: CallbackDataParams) => string) } -interface TreemapSeriesItemStyleOption extends ItemStyleOption { +interface TreemapSeriesItemStyleOption extends ItemStyleOption { borderRadius?: number | number[] colorAlpha?: number @@ -91,8 +90,8 @@ interface ExtraStateOption { } } -export interface TreemapStateOption { - itemStyle?: TreemapSeriesItemStyleOption +export interface TreemapStateOption { + itemStyle?: TreemapSeriesItemStyleOption label?: TreemapSeriesLabelOption upperLabel?: TreemapSeriesLabelOption } @@ -149,8 +148,8 @@ export interface TreemapSeriesNodeItemOption extends TreemapSeriesVisualOption, } export interface TreemapSeriesOption - extends SeriesOption, - TreemapStateOption, + extends SeriesOption, ExtraStateOption>, + TreemapStateOption, BoxLayoutOptionMixin, RoamOptionMixin, TreemapSeriesVisualOption { diff --git a/src/coord/geo/GeoModel.ts b/src/coord/geo/GeoModel.ts index 4f89d40b29..adbafee13a 100644 --- a/src/coord/geo/GeoModel.ts +++ b/src/coord/geo/GeoModel.ts @@ -43,7 +43,7 @@ import GlobalModel from '../../model/Global'; import geoSourceManager from './geoSourceManager'; -export interface GeoItemStyleOption extends ItemStyleOption { +export interface GeoItemStyleOption extends ItemStyleOption { areaColor?: ZRColor; }; interface GeoLabelOption extends LabelOption { diff --git a/src/util/types.ts b/src/util/types.ts index a484f425bd..e6ccb589fa 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -938,37 +938,33 @@ export type SymbolOffsetCallback = (rawValue: any, params: T) => string | num * Mixin of option set to control the element symbol. * Include type of symbol, and size of symbol. */ -export interface SymbolOptionMixin { +export interface SymbolOptionMixin { /** * type of symbol, like `cirlce`, `rect`, or custom path and image. */ - symbol?: string | (unknown extends T ? never : SymbolCallback) + symbol?: string | (T extends never ? never : SymbolCallback) /** * Size of symbol. */ - symbolSize?: number | number[] | (unknown extends T ? never : SymbolSizeCallback) + symbolSize?: number | number[] | (T extends never ? never : SymbolSizeCallback) - symbolRotate?: number | (unknown extends T ? never : SymbolRotateCallback) + symbolRotate?: number | (T extends never ? never : SymbolRotateCallback) symbolKeepAspect?: boolean - symbolOffset?: string | number | (string | number)[] | (unknown extends T ? never : SymbolOffsetCallback) + symbolOffset?: string | number | (string | number)[] | (T extends never ? never : SymbolOffsetCallback) } /** * ItemStyleOption is a most common used set to config element styles. * It includes both fill and stroke style. */ -export interface ItemStyleOption extends ShadowOptionMixin, BorderOptionMixin { - color?: ZRColor +export interface ItemStyleOption extends ShadowOptionMixin, BorderOptionMixin { + color?: ZRColor | (TCbParams extends never ? never : ((params: TCbParams) => ZRColor)) opacity?: number decal?: DecalObject | 'none' } -export interface SeriesItemStyleOption extends Omit { - color?: ZRColor | ((params: TParams) => string) -} - /** * ItemStyleOption is a option set to control styles on lines. * Used in the components or series like `line`, `axis` From 179b20ad52c3a0d9428a0cf93315369b10f39416 Mon Sep 17 00:00:00 2001 From: pissang Date: Thu, 9 Sep 2021 10:48:16 +0800 Subject: [PATCH 5/9] fix(type): fix some type errors in custom series --- src/chart/custom/CustomSeries.ts | 32 ++++++++++++++++++++++++-------- src/chart/custom/CustomView.ts | 18 +++++++++--------- src/layout/barGrid.ts | 10 +++++----- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/src/chart/custom/CustomSeries.ts b/src/chart/custom/CustomSeries.ts index 2b8bb3c9b2..c34cbdf148 100644 --- a/src/chart/custom/CustomSeries.ts +++ b/src/chart/custom/CustomSeries.ts @@ -335,13 +335,8 @@ type CustomSeriesRenderItem = ( api: CustomSeriesRenderItemAPI ) => CustomElementOption; -interface CustomSeriesStateOption { - itemStyle?: ItemStyleOption; - label?: LabelOption; -} - export interface CustomSeriesOption extends - SeriesOption, // don't support StateOption in custom series. + SeriesOption, // don't support StateOption in custom series. SeriesEncodeOptionMixin, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, @@ -356,12 +351,33 @@ export interface CustomSeriesOption extends renderItem?: CustomSeriesRenderItem; + /** + * @deprecated + */ + itemStyle?: ItemStyleOption; + /** + * @deprecated + */ + label?: LabelOption; + + /** + * @deprecated + */ + emphasis?: { + /** + * @deprecated + */ + itemStyle?: ItemStyleOption; + /** + * @deprecated + */ + label?: LabelOption; + } + // Only works on polar and cartesian2d coordinate system. clip?: boolean; } -export interface LegacyCustomSeriesOption extends SeriesOption, CustomSeriesStateOption {} - export const customInnerStore = makeInner<{ info: CustomExtraElementInfo; customPathData: string; diff --git a/src/chart/custom/CustomView.ts b/src/chart/custom/CustomView.ts index 1ba6d86b05..ae042b7f22 100644 --- a/src/chart/custom/CustomView.ts +++ b/src/chart/custom/CustomView.ts @@ -82,7 +82,6 @@ import CustomSeriesModel, { CustomDisplayableOption, CustomSeriesRenderItemAPI, CustomSeriesRenderItemParams, - LegacyCustomSeriesOption, CustomGroupOption, WrapEncodeDefRet, NonStyleVisualProps, @@ -102,6 +101,7 @@ import { prepareTransformTransitionFrom } from './prepare'; import { PatternObject } from 'zrender/src/graphic/Pattern'; +import { CustomSeriesOption } from '../../export/option'; const transformPropNamesStr = keys(TRANSFORM_PROPS).join(', '); @@ -879,23 +879,23 @@ function makeRenderItem( // Do not support call `api` asynchronously without dataIndexInside input. let currDataIndexInside: number; - let currItemModel: Model; - let currItemStyleModels: Partial>> = {}; - let currLabelModels: Partial>> = {}; + let currItemModel: Model; + let currItemStyleModels: Partial>> = {}; + let currLabelModels: Partial>> = {}; - const seriesItemStyleModels = {} as Record>; + const seriesItemStyleModels = {} as Record>; - const seriesLabelModels = {} as Record>; + const seriesLabelModels = {} as Record>; for (let i = 0; i < STATES.length; i++) { const stateName = STATES[i]; - seriesItemStyleModels[stateName] = (customSeries as Model) + seriesItemStyleModels[stateName] = (customSeries as Model) .getModel(PATH_ITEM_STYLE[stateName]); - seriesLabelModels[stateName] = (customSeries as Model) + seriesLabelModels[stateName] = (customSeries as Model) .getModel(PATH_LABEL[stateName]); } - function getItemModel(dataIndexInside: number): Model { + function getItemModel(dataIndexInside: number): Model { return dataIndexInside === currDataIndexInside ? (currItemModel || (currItemModel = data.getItemModel(dataIndexInside))) : data.getItemModel(dataIndexInside); diff --git a/src/layout/barGrid.ts b/src/layout/barGrid.ts index 4a7c90887f..9c7807656c 100644 --- a/src/layout/barGrid.ts +++ b/src/layout/barGrid.ts @@ -77,11 +77,11 @@ type BarWidthAndOffset = Dictionary Date: Thu, 9 Sep 2021 11:16:45 +0800 Subject: [PATCH 6/9] fix(type): fix some type errors --- src/chart/lines/LinesSeries.ts | 6 +++--- src/chart/parallel/ParallelSeries.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chart/lines/LinesSeries.ts b/src/chart/lines/LinesSeries.ts index b762fe1c9e..7598626b65 100644 --- a/src/chart/lines/LinesSeries.ts +++ b/src/chart/lines/LinesSeries.ts @@ -89,7 +89,7 @@ interface LinesStatesMixin { emphasis?: DefaultStatesMixinEmpasis } export interface LinesStateOption { - lineStyle?: LinesLineStyleOption ZRColor> + lineStyle?: LinesLineStyleOption<(TCbParams extends never ? never : (params: TCbParams) => ZRColor) | ZRColor> label?: SeriesLineLabelOption } @@ -108,8 +108,6 @@ export interface LinesDataItemOption extends LinesStateOption + + dimensions?: DimensionDefinitionLoose | DimensionDefinitionLoose[] } class LinesSeriesModel extends SeriesModel { diff --git a/src/chart/parallel/ParallelSeries.ts b/src/chart/parallel/ParallelSeries.ts index 9a8f68e67a..0b727eef0a 100644 --- a/src/chart/parallel/ParallelSeries.ts +++ b/src/chart/parallel/ParallelSeries.ts @@ -49,7 +49,7 @@ interface ParallelStatesMixin { emphasis?: DefaultStatesMixinEmpasis } export interface ParallelStateOption { - lineStyle?: LineStyleOption ZRColor> + lineStyle?: LineStyleOption<(TCbParams extends never ? never : (params: TCbParams) => ZRColor) | ZRColor> label?: SeriesLabelOption } From 3f520525e4c7189fc6db670ae273fe2f4facbc40 Mon Sep 17 00:00:00 2001 From: pissang Date: Thu, 9 Sep 2021 13:00:28 +0800 Subject: [PATCH 7/9] fix(type): expose more type from custom series --- src/chart/custom/CustomSeries.ts | 45 +++++++++++++++++++------------- src/chart/custom/CustomView.ts | 5 ++-- src/export/option.ts | 13 +++++++-- 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/src/chart/custom/CustomSeries.ts b/src/chart/custom/CustomSeries.ts index c34cbdf148..7167274ad9 100644 --- a/src/chart/custom/CustomSeries.ts +++ b/src/chart/custom/CustomSeries.ts @@ -158,9 +158,6 @@ export interface CustomBaseElementOption extends Partial & TransitionAnyOption; // updateDuringAnimation during?(params: CustomBaseDuringAPI): void; - - focus?: 'none' | 'self' | 'series' | ArrayLike - blurScope?: BlurScope }; export interface CustomDisplayableOption extends CustomBaseElementOption, Partial @@ -204,17 +201,17 @@ export interface CustomBaseZRPathOption + rect: Partial + sector: Partial + poygon: Partial + polyline: Partial + line: Partial + arc: Partial + bezierCurve: Partial + ring: Partial + ellipse: Partial + compoundPath: Partial } interface CustomSVGPathShapeOption { @@ -270,7 +267,10 @@ export type CustomElementOption = CustomPathOption | CustomGroupOption; // Can only set focus, blur on the root element. -export type CustomChildElementOption = Omit; +export type CustomRootElementOption = CustomElementOption & { + focus?: 'none' | 'self' | 'series' | ArrayLike + blurScope?: BlurScope +}; export type CustomElementOptionOnState = CustomDisplayableOptionOnState | CustomImageOptionOnState; @@ -287,7 +287,13 @@ export interface CustomSeriesRenderItemAPI extends value(dim: DimensionLoose, dataIndexInside?: number): ParsedValue; ordinalRawValue(dim: DimensionLoose, dataIndexInside?: number): ParsedValue | OrdinalRawValue; + /** + * @deprecated + */ style(userProps?: ZRStyleProps, dataIndexInside?: number): ZRStyleProps; + /** + * @deprecated + */ styleEmphasis(userProps?: ZRStyleProps, dataIndexInside?: number): ZRStyleProps; visual( visualType: VT, @@ -310,7 +316,7 @@ export interface CustomSeriesRenderItemCoordinateSystemAPI { ): number[]; size?( dataSize: OptionDataValue | OptionDataValue[], - dataItem: OptionDataValue | OptionDataValue[] + dataItem?: OptionDataValue | OptionDataValue[] ): number | number[]; } @@ -330,6 +336,9 @@ export interface CustomSeriesRenderItemParams { actionType?: string; } + +export type CustomSeriesRenderItemReturn = CustomRootElementOption; + type CustomSeriesRenderItem = ( params: CustomSeriesRenderItemParams, api: CustomSeriesRenderItemAPI @@ -354,7 +363,7 @@ export interface CustomSeriesOption extends /** * @deprecated */ - itemStyle?: ItemStyleOption; + itemStyle?: ItemStyleOption; /** * @deprecated */ diff --git a/src/chart/custom/CustomView.ts b/src/chart/custom/CustomView.ts index ae042b7f22..f084d84228 100644 --- a/src/chart/custom/CustomView.ts +++ b/src/chart/custom/CustomView.ts @@ -91,7 +91,8 @@ import CustomSeriesModel, { customInnerStore, LooseElementProps, PrepareCustomInfo, - CustomPathOption + CustomPathOption, + CustomRootElementOption } from './CustomSeries'; import { prepareShapeOrExtraAllPropsFinal, @@ -1148,7 +1149,7 @@ function createOrUpdateItem( api: ExtensionAPI, existsEl: Element, dataIndex: number, - elOption: CustomElementOption, + elOption: CustomRootElementOption, seriesModel: CustomSeriesModel, group: ViewRootGroup, data: SeriesData diff --git a/src/export/option.ts b/src/export/option.ts index 7ed1b4b35e..c3256c3f22 100644 --- a/src/export/option.ts +++ b/src/export/option.ts @@ -86,7 +86,12 @@ import type {HeatmapSeriesOption as HeatmapSeriesOptionInner} from '../chart/hea import type {PictorialBarSeriesOption as PictorialBarSeriesOptionInner} from '../chart/bar/PictorialBarSeries'; import type {ThemeRiverSeriesOption as ThemeRiverSeriesOptionInner} from '../chart/themeRiver/ThemeRiverSeries'; import type {SunburstSeriesOption as SunburstSeriesOptionInner} from '../chart/sunburst/SunburstSeries'; -import type {CustomSeriesOption as CustomSeriesOptionInner} from '../chart/custom/CustomSeries'; +import type { + CustomSeriesOption as CustomSeriesOptionInner, + CustomSeriesRenderItemAPI, + CustomSeriesRenderItemParams, + CustomSeriesRenderItemReturn +} from '../chart/custom/CustomSeries'; import type { GraphicComponentLooseOption as GraphicComponentOption } from '../component/graphic/install'; import type { DatasetOption as DatasetComponentOption } from '../component/dataset/install'; @@ -264,5 +269,9 @@ export { TooltipFormatterCallback as TooltipComponentFormatterCallback, TopLevelFormatterParams as TooltipComponentFormatterCallbackParams, TooltipPositionCallback as TooltipComponentPositionCallback, - TooltipPositionCallbackParams as TooltipComponentPositionCallbackParams + TooltipPositionCallbackParams as TooltipComponentPositionCallbackParams, + + CustomSeriesRenderItemParams, + CustomSeriesRenderItemAPI, + CustomSeriesRenderItemReturn }; From a7e1e7fcb12e803d61ede99127fd3d8ebda9d2d4 Mon Sep 17 00:00:00 2001 From: pissang Date: Thu, 9 Sep 2021 13:21:07 +0800 Subject: [PATCH 8/9] fix(type): optimize custom renderItem return type. expose renderItem type --- src/chart/custom/CustomSeries.ts | 8 ++++---- src/export/option.ts | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/chart/custom/CustomSeries.ts b/src/chart/custom/CustomSeries.ts index 7167274ad9..8fa8285c77 100644 --- a/src/chart/custom/CustomSeries.ts +++ b/src/chart/custom/CustomSeries.ts @@ -204,7 +204,7 @@ interface BuiltinShapes { circle: Partial rect: Partial sector: Partial - poygon: Partial + polygon: Partial polyline: Partial line: Partial arc: Partial @@ -337,12 +337,12 @@ export interface CustomSeriesRenderItemParams { actionType?: string; } -export type CustomSeriesRenderItemReturn = CustomRootElementOption; +export type CustomSeriesRenderItemReturn = CustomRootElementOption | undefined | null; -type CustomSeriesRenderItem = ( +export type CustomSeriesRenderItem = ( params: CustomSeriesRenderItemParams, api: CustomSeriesRenderItemAPI -) => CustomElementOption; +) => CustomSeriesRenderItemReturn; export interface CustomSeriesOption extends SeriesOption, // don't support StateOption in custom series. diff --git a/src/export/option.ts b/src/export/option.ts index c3256c3f22..4980e4304f 100644 --- a/src/export/option.ts +++ b/src/export/option.ts @@ -90,7 +90,8 @@ import type { CustomSeriesOption as CustomSeriesOptionInner, CustomSeriesRenderItemAPI, CustomSeriesRenderItemParams, - CustomSeriesRenderItemReturn + CustomSeriesRenderItemReturn, + CustomSeriesRenderItem } from '../chart/custom/CustomSeries'; import type { GraphicComponentLooseOption as GraphicComponentOption } from '../component/graphic/install'; @@ -273,5 +274,6 @@ export { CustomSeriesRenderItemParams, CustomSeriesRenderItemAPI, - CustomSeriesRenderItemReturn + CustomSeriesRenderItemReturn, + CustomSeriesRenderItem }; From 8e4fbc983989c02f23d3116814b5d6eaf3f941ed Mon Sep 17 00:00:00 2001 From: pissang Date: Thu, 9 Sep 2021 14:03:56 +0800 Subject: [PATCH 9/9] style: fix missing comma --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 1941965fbe..811908a873 100644 --- a/index.d.ts +++ b/index.d.ts @@ -19,5 +19,5 @@ import * as echarts from './types/dist/echarts'; // Export for UMD module. -export as namespace echarts +export as namespace echarts; export = echarts; \ No newline at end of file