You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/09/09 02:17:26 UTC

[echarts] branch improve-types updated: fix(type): fix callback type in itemStyle.color #14279

This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch improve-types
in repository https://gitbox.apache.org/repos/asf/echarts.git


The following commit(s) were added to refs/heads/improve-types by this push:
     new 0779757  fix(type): fix callback type in itemStyle.color #14279
0779757 is described below

commit 0779757dd37bbda7598754b963138425ac3ce592
Author: pissang <bm...@gmail.com>
AuthorDate: Thu Sep 9 10:16:40 2021 +0800

    fix(type): fix callback type in itemStyle.color #14279
---
 src/chart/bar/BarSeries.ts                     | 13 ++++++++-----
 src/chart/boxplot/BoxplotSeries.ts             | 12 +++++++-----
 src/chart/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 57323c5..d2b76ab 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<SeriesLabelOption, 'position'>
     & {position?: PolarBarLabelPosition | 'outside'};
 
-export interface BarStateOption {
-    itemStyle?: BarItemStyleOption
+export interface BarStateOption<TCbParams = never> {
+    itemStyle?: BarItemStyleOption<TCbParams>
     label?: BarSeriesLabelOption
 }
 
@@ -51,7 +52,7 @@ interface BarStatesMixin {
     emphasis?: DefaultStatesMixinEmpasis
 }
 
-export interface BarItemStyleOption extends ItemStyleOption {
+export interface BarItemStyleOption<TCbParams = never> extends ItemStyleOption<TCbParams> {
     // 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, BarStatesMixin>, BarStateOption,
+export interface BarSeriesOption
+    extends BaseBarSeriesOption<BarStateOption<CallbackDataParams>, BarStatesMixin>,
+    BarStateOption<CallbackDataParams>,
     SeriesStackOptionMixin, SeriesSamplingOptionMixin, SeriesEncodeOptionMixin {
 
     type?: 'bar'
diff --git a/src/chart/boxplot/BoxplotSeries.ts b/src/chart/boxplot/BoxplotSeries.ts
index 60cbc41..b87276b 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
     label?: SeriesLabelOption
 }
 
@@ -55,7 +55,9 @@ interface ExtraStateOption {
     }
 }
 
-export interface BoxplotSeriesOption extends SeriesOption<BoxplotStateOption, ExtraStateOption>, BoxplotStateOption,
+export interface BoxplotSeriesOption
+    extends SeriesOption<BoxplotStateOption<CallbackDataParams>, ExtraStateOption>,
+    BoxplotStateOption<CallbackDataParams>,
     SeriesOnCartesianOptionMixin, SeriesEncodeOptionMixin {
     type?: 'boxplot'
 
diff --git a/src/chart/effectScatter/EffectScatterSeries.ts b/src/chart/effectScatter/EffectScatterSeries.ts
index 8e936b3..19a468c 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
     label?: SeriesLabelOption
 }
 
@@ -64,7 +64,8 @@ export interface EffectScatterDataItemOption extends SymbolOptionMixin,
 }
 
 export interface EffectScatterSeriesOption
-    extends SeriesOption<EffectScatterStateOption, EffectScatterStatesOptionMixin>, EffectScatterStateOption,
+    extends SeriesOption<EffectScatterStateOption<CallbackDataParams>, EffectScatterStatesOptionMixin>,
+    EffectScatterStateOption<CallbackDataParams>,
     SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin,
     SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SymbolOptionMixin<CallbackDataParams>,
     SeriesEncodeOptionMixin {
diff --git a/src/chart/funnel/FunnelSeries.ts b/src/chart/funnel/FunnelSeries.ts
index 8ac6fcf..f102f79 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
     label?: FunnelLabelOption
     labelLine?: LabelLineOption
 }
@@ -67,7 +71,9 @@ export interface FunnelDataItemOption
     }
 }
 
-export interface FunnelSeriesOption extends SeriesOption<FunnelStateOption, FunnelStatesMixin>, FunnelStateOption,
+export interface FunnelSeriesOption
+    extends SeriesOption<FunnelStateOption<FunnelCallbackDataParams>, FunnelStatesMixin>,
+    FunnelStateOption<FunnelCallbackDataParams>,
     BoxLayoutOptionMixin, SeriesEncodeOptionMixin {
     type?: 'funnel'
 
@@ -128,9 +134,9 @@ class FunnelSeriesModel extends SeriesModel<FunnelSeriesOption> {
     }
 
     // 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 b861bf7..c444a6e 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
 }
 
 export interface GaugeDataItemOption extends GaugeStateOption,
-    StatesOptionMixin<GaugeStateOption, GaugeStatesMixin> {
+    StatesOptionMixin<GaugeStateOption<CallbackDataParams>, 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, GaugeStatesMixin>, GaugeStateOption,
+export interface GaugeSeriesOption extends SeriesOption<GaugeStateOption, GaugeStatesMixin>,
+    GaugeStateOption<CallbackDataParams>,
     CircleLayoutOptionMixin, SeriesEncodeOptionMixin {
     type?: 'gauge'
 
diff --git a/src/chart/graph/GraphSeries.ts b/src/chart/graph/GraphSeries.ts
index eb03401..a3241c0 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
     label?: SeriesLabelOption
 }
 
@@ -136,7 +136,8 @@ export interface GraphCategoryItemOption extends SymbolOptionMixin,
     value?: OptionDataValue
 }
 
-export interface GraphSeriesOption extends SeriesOption<GraphNodeStateOption, GraphNodeStatesMixin>,
+export interface GraphSeriesOption
+    extends SeriesOption<GraphNodeStateOption<CallbackDataParams>, GraphNodeStatesMixin>,
     SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin,
     SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin,
     SymbolOptionMixin<CallbackDataParams>,
@@ -177,7 +178,7 @@ export interface GraphSeriesOption extends SeriesOption<GraphNodeStateOption, Gr
     edgeLabel?: SeriesLineLabelOption
     label?: SeriesLabelOption
 
-    itemStyle?: ItemStyleOption
+    itemStyle?: ItemStyleOption<CallbackDataParams>
     lineStyle?: GraphEdgeLineStyleOption
 
     emphasis?: {
diff --git a/src/chart/heatmap/HeatmapSeries.ts b/src/chart/heatmap/HeatmapSeries.ts
index 3a78569..7fcd89f 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<TCbParams = never> {
     // Available on cartesian2d coordinate system
-    itemStyle?: ItemStyleOption
+    itemStyle?: ItemStyleOption<TCbParams>
     label?: SeriesLabelOption
 }
 
@@ -54,8 +55,14 @@ export interface HeatmapDataItemOption extends HeatmapStateOption,
     value: HeatmapDataValue
 }
 
-export interface HeatmapSeriesOption extends SeriesOption<HeatmapStateOption, FunnelStatesMixin>, HeatmapStateOption,
-    SeriesOnCartesianOptionMixin, SeriesOnGeoOptionMixin, SeriesOnCalendarOptionMixin, SeriesEncodeOptionMixin {
+export interface HeatmapSeriesOption
+    extends SeriesOption<HeatmapStateOption<CallbackDataParams>, FunnelStatesMixin>,
+    HeatmapStateOption<CallbackDataParams>,
+    SeriesOnCartesianOptionMixin,
+    SeriesOnGeoOptionMixin,
+    SeriesOnCalendarOptionMixin,
+    SeriesEncodeOptionMixin {
+
     type?: 'heatmap'
 
     coordinateSystem?: 'cartesian2d' | 'geo' | 'calendar'
@@ -69,6 +76,8 @@ export interface HeatmapSeriesOption extends SeriesOption<HeatmapStateOption, Fu
     data?: (HeatmapDataItemOption | HeatmapDataValue)[]
 }
 
+
+
 class HeatmapSeriesModel extends SeriesModel<HeatmapSeriesOption> {
     static readonly type = 'series.heatmap';
     readonly type = HeatmapSeriesModel.type;
diff --git a/src/chart/line/LineSeries.ts b/src/chart/line/LineSeries.ts
index 5c569e6..1b572b5 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
     label?: SeriesLabelOption
     endLabel?: LineEndLabelOption
 }
@@ -70,7 +70,7 @@ export interface LineEndLabelOption extends SeriesLabelOption {
 }
 
 
-export interface LineSeriesOption extends SeriesOption<LineStateOption, LineStateOptionMixin & {
+export interface LineSeriesOption extends SeriesOption<LineStateOption<CallbackDataParams>, LineStateOptionMixin & {
     emphasis?: {
         lineStyle?: LineStyleOption | {
             width?: 'bolder'
@@ -81,7 +81,7 @@ export interface LineSeriesOption extends SeriesOption<LineStateOption, LineStat
         lineStyle?: LineStyleOption
         areaStyle?: AreaStyleOption
     }
-}>, LineStateOption,
+}>, LineStateOption<CallbackDataParams>,
     SeriesOnCartesianOptionMixin,
     SeriesOnPolarOptionMixin,
     SeriesStackOptionMixin,
diff --git a/src/chart/lines/LinesSeries.ts b/src/chart/lines/LinesSeries.ts
index 61e4d44..b762fe1 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<TClr> extends LineStyleOption<TClr> {
     curveness?: number
 }
 
@@ -86,13 +88,13 @@ interface LegacyDataItemOption {
 interface LinesStatesMixin {
     emphasis?: DefaultStatesMixinEmpasis
 }
-export interface LinesStateOption {
-    lineStyle?: LinesLineStyleOption
+export interface LinesStateOption<TCbParams = never> {
+    lineStyle?: LinesLineStyleOption<TCbParams extends never ? never : (params: TCbParams) => ZRColor>
     label?: SeriesLineLabelOption
 }
 
-export interface LinesDataItemOption extends LinesStateOption,
-    StatesOptionMixin<LinesStateOption, LinesStatesMixin> {
+export interface LinesDataItemOption extends LinesStateOption<CallbackDataParams>,
+    StatesOptionMixin<LinesStateOption<CallbackDataParams>, LinesStatesMixin> {
     name?: string
 
     fromName?: string
diff --git a/src/chart/map/MapSeries.ts b/src/chart/map/MapSeries.ts
index d146f11..4aab23a 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<TCbParams = never> {
+    itemStyle?: GeoItemStyleOption<TCbParams>
     label?: SeriesLabelOption
 }
-export interface MapDataItemOption extends MapStateOption, StatesOptionMixin<MapStateOption, StatesMixinBase>,
+export interface MapDataItemOption extends MapStateOption,
+    StatesOptionMixin<MapStateOption, StatesMixinBase>,
     OptionDataItemObject<OptionDataValueNumeric> {
     cursor?: string
 }
@@ -57,8 +59,8 @@ export interface MapDataItemOption extends MapStateOption, StatesOptionMixin<Map
 export type MapValueCalculationType = 'sum' | 'average' | 'min' | 'max';
 
 export interface MapSeriesOption extends
-    SeriesOption<MapStateOption, StatesMixinBase>, MapStateOption,
-
+    SeriesOption<MapStateOption<CallbackDataParams>, StatesMixinBase>,
+    MapStateOption<CallbackDataParams>,
     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 4b44d79..9a8f68e 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<TCbParams = never> {
+    lineStyle?: LineStyleOption<TCbParams extends never ? never : (params: TCbParams) => ZRColor>
     label?: SeriesLabelOption
 }
 
@@ -56,7 +58,8 @@ export interface ParallelSeriesDataItemOption extends ParallelStateOption,
     value?: ParallelSeriesDataValue[]
 }
 export interface ParallelSeriesOption extends
-    SeriesOption<ParallelStateOption, ParallelStatesMixin>, ParallelStateOption,
+    SeriesOption<ParallelStateOption<CallbackDataParams>, ParallelStatesMixin>,
+    ParallelStateOption<CallbackDataParams>,
     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<ParallelSeriesOption> {
 
     static type = 'series.parallel';
diff --git a/src/chart/pie/PieSeries.ts b/src/chart/pie/PieSeries.ts
index de283ad..efa5bda 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<TCbParams = never> extends ItemStyleOption<TCbParams> {
     // 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<TCbParams = never> {
     // TODO: TYPE Color Callback
-    itemStyle?: PieItemStyleOption
+    itemStyle?: PieItemStyleOption<TCbParams>
     label?: PieLabelOption
     labelLine?: PieLabelLineOption
 }
@@ -94,7 +98,8 @@ export interface PieDataItemOption extends
     cursor?: string
 }
 export interface PieSeriesOption extends
-    Omit<SeriesOption<PieStateOption, ExtraStateOption>, 'labelLine'>, PieStateOption,
+    Omit<SeriesOption<PieStateOption<PieCallbackDataParams>, ExtraStateOption>, 'labelLine'>,
+    PieStateOption<PieCallbackDataParams>,
     CircleLayoutOptionMixin,
     BoxLayoutOptionMixin,
     SeriesEncodeOptionMixin {
@@ -163,9 +168,9 @@ class PieSeriesModel extends SeriesModel<PieSeriesOption> {
     /**
      * @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 25829db..c6f9bc5 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<TCbParams = never> {
     lineStyle?: LineStyleOption
     areaStyle?: AreaStyleOption
     label?: SeriesLabelOption
-    itemStyle?: ItemStyleOption
+    itemStyle?: ItemStyleOption<TCbParams>
 }
 export interface RadarSeriesDataItemOption extends SymbolOptionMixin,
-    RadarSeriesStateOption, StatesOptionMixin<RadarSeriesStateOption, RadarStatesMixin>,
+    RadarSeriesStateOption<CallbackDataParams>,
+    StatesOptionMixin<RadarSeriesStateOption<CallbackDataParams>, RadarStatesMixin>,
     OptionDataItemObject<RadarSeriesDataValue> {
 }
 
 export interface RadarSeriesOption
-    extends SeriesOption<RadarSeriesStateOption, RadarStatesMixin>, RadarSeriesStateOption,
+    extends SeriesOption<RadarSeriesStateOption, RadarStatesMixin>,
+    RadarSeriesStateOption,
     SymbolOptionMixin<CallbackDataParams>, SeriesEncodeOptionMixin {
     type?: 'radar'
     coordinateSystem?: 'radar'
diff --git a/src/chart/sankey/SankeySeries.ts b/src/chart/sankey/SankeySeries.ts
index 6131f56..0479035 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<TCbParams = never> {
     label?: SeriesLabelOption
-    itemStyle?: ItemStyleOption
+    itemStyle?: ItemStyleOption<TCbParams>
 }
 
 export interface SankeyEdgeStateOption {
     lineStyle?: SankeyEdgeStyleOption
 }
 
-interface SankeyBothStateOption extends SankeyNodeStateOption, SankeyEdgeStateOption {
-}
+interface SankeyBothStateOption<TCbParams> extends SankeyNodeStateOption<TCbParams>, SankeyEdgeStateOption {}
 
 interface SankeyEdgeStyleOption extends LineStyleOption {
     curveness?: number
@@ -92,7 +92,8 @@ export interface SankeyLevelOption extends SankeyNodeStateOption, SankeyEdgeStat
 }
 
 export interface SankeySeriesOption
-    extends SeriesOption<SankeyBothStateOption, ExtraStateOption>, SankeyBothStateOption,
+    extends SeriesOption<SankeyBothStateOption<CallbackDataParams>, ExtraStateOption>,
+    SankeyBothStateOption<CallbackDataParams>,
     BoxLayoutOptionMixin {
     type?: 'sankey'
 
diff --git a/src/chart/scatter/ScatterSeries.ts b/src/chart/scatter/ScatterSeries.ts
index f2b1482..f79f422 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
     label?: SeriesLabelOption
 }
 
@@ -60,7 +60,8 @@ export interface ScatterDataItemOption extends SymbolOptionMixin,
 }
 
 export interface ScatterSeriesOption
-    extends SeriesOption<ScatterStateOption, ScatterStatesOptionMixin>, ScatterStateOption,
+    extends SeriesOption<ScatterStateOption<CallbackDataParams>, ScatterStatesOptionMixin>,
+    ScatterStateOption<CallbackDataParams>,
     SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin,
     SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin,
     SeriesLargeOptionMixin, SeriesStackOptionMixin,
diff --git a/src/chart/sunburst/SunburstSeries.ts b/src/chart/sunburst/SunburstSeries.ts
index afbe542..f7d801c 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<TCbParams = never> extends ItemStyleOption<TCbParams> {
     // 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<TCbParams = never> {
+    itemStyle?: SunburstItemStyleOption<TCbParams>
     label?: SunburstLabelOption
 }
 
 export interface SunburstSeriesNodeItemOption extends
-    SunburstStateOption, StatesOptionMixin<SunburstStateOption, SunburstStatesMixin>,
+    SunburstStateOption<CallbackDataParams>,
+    StatesOptionMixin<SunburstStateOption<CallbackDataParams>, SunburstStatesMixin>,
     OptionDataItemObject<OptionDataValue>
 {
     nodeClick?: 'rootToNode' | 'link'
diff --git a/src/chart/themeRiver/ThemeRiverSeries.ts b/src/chart/themeRiver/ThemeRiverSeries.ts
index 4cd6c57..2e05a9a 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<TCbParams = never> {
     label?: ThemeRiverSeriesLabelOption
-    itemStyle?: ItemStyleOption
+    itemStyle?: ItemStyleOption<TCbParams>
 }
 
-export interface ThemeRiverSeriesOption extends SeriesOption<ThemeRiverStateOption>, ThemeRiverStateOption,
+export interface ThemeRiverSeriesOption
+    extends SeriesOption<ThemeRiverStateOption<CallbackDataParams>, ThemeRiverStatesMixin>,
+    ThemeRiverStateOption<CallbackDataParams>,
     SeriesOnSingleOptionMixin, BoxLayoutOptionMixin {
     type?: 'themeRiver'
 
diff --git a/src/chart/tree/TreeSeries.ts b/src/chart/tree/TreeSeries.ts
index c51181f..5d7b8f5 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<TCbParams = never> {
+    itemStyle?: ItemStyleOption<TCbParams>
     /**
      * Line style of the edge between node and it's parent.
      */
@@ -61,7 +61,8 @@ interface TreeStatesMixin {
 }
 
 export interface TreeSeriesNodeItemOption extends SymbolOptionMixin<CallbackDataParams>,
-    TreeSeriesStateOption, StatesOptionMixin<TreeSeriesStateOption, TreeStatesMixin>,
+    TreeSeriesStateOption<CallbackDataParams>,
+    StatesOptionMixin<TreeSeriesStateOption<CallbackDataParams>, TreeStatesMixin>,
     OptionDataItemObject<OptionDataValue> {
 
     children?: TreeSeriesNodeItemOption[]
diff --git a/src/chart/treemap/TreemapSeries.ts b/src/chart/treemap/TreemapSeries.ts
index 287540e..043018c 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<TCbParams = never> extends ItemStyleOption<TCbParams> {
     borderRadius?: number | number[]
 
     colorAlpha?: number
@@ -91,8 +90,8 @@ interface ExtraStateOption {
     }
 }
 
-export interface TreemapStateOption {
-    itemStyle?: TreemapSeriesItemStyleOption
+export interface TreemapStateOption<TCbParams = never> {
+    itemStyle?: TreemapSeriesItemStyleOption<TCbParams>
     label?: TreemapSeriesLabelOption
     upperLabel?: TreemapSeriesLabelOption
 }
@@ -149,8 +148,8 @@ export interface TreemapSeriesNodeItemOption extends TreemapSeriesVisualOption,
 }
 
 export interface TreemapSeriesOption
-    extends SeriesOption<TreemapStateOption, ExtraStateOption>,
-    TreemapStateOption,
+    extends SeriesOption<TreemapStateOption<TreemapSeriesCallbackDataParams>, ExtraStateOption>,
+    TreemapStateOption<TreemapSeriesCallbackDataParams>,
     BoxLayoutOptionMixin,
     RoamOptionMixin,
     TreemapSeriesVisualOption {
diff --git a/src/coord/geo/GeoModel.ts b/src/coord/geo/GeoModel.ts
index 4f89d40..adbafee 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<TCbParams = never> extends ItemStyleOption<TCbParams> {
     areaColor?: ZRColor;
 };
 interface GeoLabelOption extends LabelOption {
diff --git a/src/util/types.ts b/src/util/types.ts
index a484f42..e6ccb58 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -938,37 +938,33 @@ export type SymbolOffsetCallback<T> = (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<T = unknown> {
+export interface SymbolOptionMixin<T = never> {
     /**
      * type of symbol, like `cirlce`, `rect`, or custom path and image.
      */
-    symbol?: string | (unknown extends T ? never : SymbolCallback<T>)
+    symbol?: string | (T extends never ? never : SymbolCallback<T>)
     /**
      * Size of symbol.
      */
-    symbolSize?: number | number[] | (unknown extends T ? never : SymbolSizeCallback<T>)
+    symbolSize?: number | number[] | (T extends never ? never : SymbolSizeCallback<T>)
 
-    symbolRotate?: number | (unknown extends T ? never : SymbolRotateCallback<T>)
+    symbolRotate?: number | (T extends never ? never : SymbolRotateCallback<T>)
 
     symbolKeepAspect?: boolean
 
-    symbolOffset?: string | number | (string | number)[] | (unknown extends T ? never : SymbolOffsetCallback<T>)
+    symbolOffset?: string | number | (string | number)[] | (T extends never ? never : SymbolOffsetCallback<T>)
 }
 
 /**
  * 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<TCbParams = never> extends ShadowOptionMixin, BorderOptionMixin {
+    color?: ZRColor | (TCbParams extends never ? never : ((params: TCbParams) => ZRColor))
     opacity?: number
     decal?: DecalObject | 'none'
 }
 
-export interface SeriesItemStyleOption<TParams = CallbackDataParams> extends Omit<ItemStyleOption, 'color'> {
-    color?: ZRColor | ((params: TParams) => string)
-}
-
 /**
  * ItemStyleOption is a option set to control styles on lines.
  * Used in the components or series like `line`, `axis`

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org