@@ -10,25 +10,31 @@ export type SegmentedValue = string | number;
1010
1111export type SegmentedRawOption = SegmentedValue ;
1212
13- export interface SegmentedLabeledOption {
13+ export interface SegmentedLabeledOption < ValueType = SegmentedRawOption > {
1414 className ?: string ;
1515 disabled ?: boolean ;
1616 label : React . ReactNode ;
17- value : SegmentedRawOption ;
17+ value : ValueType ;
1818 /**
1919 * html `title` property for label
2020 */
2121 title ?: string ;
2222}
2323
24- type SegmentedOptions = ( SegmentedRawOption | SegmentedLabeledOption ) [ ] ;
25-
26- export interface SegmentedProps
27- extends Omit < React . HTMLProps < HTMLDivElement > , 'onChange' > {
28- options : SegmentedOptions ;
29- defaultValue ?: SegmentedValue ;
30- value ?: SegmentedValue ;
31- onChange ?: ( value : SegmentedValue ) => void ;
24+ type SegmentedOptions < T = SegmentedRawOption > = (
25+ | T
26+ | SegmentedLabeledOption < T >
27+ ) [ ] ;
28+
29+ export interface SegmentedProps < ValueType = SegmentedValue >
30+ extends Omit <
31+ React . HTMLProps < HTMLDivElement > ,
32+ 'defaultValue' | 'value' | 'onChange'
33+ > {
34+ options : SegmentedOptions < ValueType > ;
35+ defaultValue ?: ValueType ;
36+ value ?: ValueType ;
37+ onChange ?: ( value : ValueType ) => void ;
3238 disabled ?: boolean ;
3339 prefixCls ?: string ;
3440 direction ?: 'ltr' | 'rtl' ;
@@ -219,6 +225,14 @@ const Segmented = React.forwardRef<HTMLDivElement, SegmentedProps>(
219225 } ,
220226) ;
221227
222- Segmented . displayName = 'Segmented' ;
228+ if ( process . env . NODE_ENV !== 'production' ) {
229+ Segmented . displayName = 'Segmented' ;
230+ }
231+
232+ const TypedSegmented = Segmented as < ValueType > (
233+ props : SegmentedProps < ValueType > & {
234+ ref ?: React . ForwardedRef < HTMLDivElement > ;
235+ } ,
236+ ) => ReturnType < typeof Segmented > ;
223237
224- export default Segmented ;
238+ export default TypedSegmented ;
0 commit comments