diff --git a/components/segmented/demo/basic.tsx b/components/segmented/demo/basic.tsx
index b0cfedff2c..5da7cfcc6d 100644
--- a/components/segmented/demo/basic.tsx
+++ b/components/segmented/demo/basic.tsx
@@ -2,7 +2,12 @@ import React from 'react';
import { Segmented } from 'antd';
const Demo: React.FC = () => (
-
+
+ options={['Daily', 'Weekly', 'Monthly', 'Quarterly', 'Yearly']}
+ onChange={(value) => {
+ console.log(value); // string
+ }}
+ />
);
export default Demo;
diff --git a/components/segmented/index.tsx b/components/segmented/index.tsx
index 5b32cdaba0..bdc8069330 100644
--- a/components/segmented/index.tsx
+++ b/components/segmented/index.tsx
@@ -2,6 +2,7 @@ import classNames from 'classnames';
import type {
SegmentedLabeledOption as RcSegmentedLabeledOption,
SegmentedProps as RCSegmentedProps,
+ SegmentedValue as RcSegmentedValue,
SegmentedRawOption,
} from 'rc-segmented';
import RcSegmented from 'rc-segmented';
@@ -13,11 +14,13 @@ import useStyle from './style';
export type { SegmentedValue } from 'rc-segmented';
-interface SegmentedLabeledOptionWithoutIcon extends RcSegmentedLabeledOption {
+interface SegmentedLabeledOptionWithoutIcon
+ extends RcSegmentedLabeledOption {
label: RcSegmentedLabeledOption['label'];
}
-interface SegmentedLabeledOptionWithIcon extends Omit {
+interface SegmentedLabeledOptionWithIcon
+ extends Omit, 'label'> {
label?: RcSegmentedLabeledOption['label'];
/** Set icon for Segmented item */
icon: React.ReactNode;
@@ -29,20 +32,23 @@ function isSegmentedLabeledOptionWithIcon(
return typeof option === 'object' && !!(option as SegmentedLabeledOptionWithIcon)?.icon;
}
-export type SegmentedLabeledOption =
- | SegmentedLabeledOptionWithIcon
- | SegmentedLabeledOptionWithoutIcon;
+export type SegmentedLabeledOption =
+ | SegmentedLabeledOptionWithIcon
+ | SegmentedLabeledOptionWithoutIcon;
-export interface SegmentedProps extends Omit {
+export type SegmentedOptions = (T | SegmentedLabeledOption)[];
+
+export interface SegmentedProps
+ extends Omit, 'size' | 'options'> {
rootClassName?: string;
- options: (SegmentedRawOption | SegmentedLabeledOption)[];
+ options: SegmentedOptions;
/** Option to fit width to its parent's width */
block?: boolean;
/** Option to control the display size */
size?: SizeType;
}
-const Segmented = React.forwardRef((props, ref) => {
+const InternalSegmented = React.forwardRef((props, ref) => {
const {
prefixCls: customizePrefixCls,
className,
@@ -111,6 +117,11 @@ const Segmented = React.forwardRef((props, ref)
);
});
+const Segmented = InternalSegmented as ((
+ props: SegmentedProps & React.RefAttributes,
+) => ReturnType) &
+ Pick;
+
if (process.env.NODE_ENV !== 'production') {
Segmented.displayName = 'Segmented';
}
diff --git a/package.json b/package.json
index 7b97b711ad..8ae161a70f 100644
--- a/package.json
+++ b/package.json
@@ -148,7 +148,7 @@
"rc-progress": "~3.5.1",
"rc-rate": "~2.12.0",
"rc-resize-observer": "^1.4.0",
- "rc-segmented": "~2.2.2",
+ "rc-segmented": "~2.3.0",
"rc-select": "~14.11.0",
"rc-slider": "~10.5.0",
"rc-steps": "~6.0.1",