@@ -133,50 +133,36 @@ export interface SharedSelectProps<OptionType extends BaseOptionType = DefaultOp
133133 menuItemSelectedIcon ?: RenderNode ;
134134}
135135
136- export interface SingleRawSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
137- extends SharedSelectProps < OptionType > {
136+ export interface SingleSelectProps <
137+ ValueType = any ,
138+ OptionType extends BaseOptionType = DefaultOptionType ,
139+ > extends SharedSelectProps < OptionType > {
138140 mode ?: 'combobox' ;
139- labelInValue ?: false ;
140- value ?: RawValueType | null ;
141- defaultValue ?: RawValueType | null ;
142- onChange ?: ( value : RawValueType , option : OptionType ) => void ;
141+ labelInValue ?: boolean ;
142+ value ?: ValueType | null ;
143+ defaultValue ?: ValueType | null ;
144+ onChange ?: ( value : ValueType , option : OptionType ) => void ;
143145}
144146
145- export interface SingleLabeledSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
146- extends SharedSelectProps < OptionType > {
147- mode ?: 'combobox' ;
148- labelInValue : true ;
149- value ?: LabelInValueType | null ;
150- defaultValue ?: LabelInValueType | null ;
151- onChange ?: ( value : LabelInValueType , option : OptionType ) => void ;
152- }
153-
154- export interface MultipleRawSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
155- extends SharedSelectProps < OptionType > {
147+ export interface MultipleSelectProps <
148+ ValueType = any [ ] ,
149+ OptionType extends BaseOptionType = DefaultOptionType ,
150+ > extends SharedSelectProps < OptionType > {
156151 mode : 'multiple' | 'tags' ;
157- labelInValue ?: false ;
158- value ?: RawValueType [ ] | null ;
159- defaultValue ?: RawValueType [ ] | null ;
160- onChange ?: ( value : RawValueType [ ] , option : OptionType [ ] ) => void ;
152+ labelInValue ?: boolean ;
153+ value ?: ValueType [ ] | null ;
154+ defaultValue ?: ValueType [ ] | null ;
155+ onChange ?: ( value : ValueType [ ] , option : OptionType [ ] ) => void ;
161156}
162157
163- export interface MultipleLabeledSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
164- extends SharedSelectProps < OptionType > {
165- mode : 'multiple' | 'tags' ;
166- labelInValue : true ;
167- value ?: LabelInValueType [ ] | null ;
168- defaultValue ?: LabelInValueType [ ] | null ;
169- onChange ?: ( value : LabelInValueType [ ] , option : OptionType [ ] ) => void ;
170- }
158+ export type SelectProps < ValueType = any , OptionType extends BaseOptionType = DefaultOptionType > =
159+ | SingleSelectProps < ValueType , OptionType >
160+ | MultipleSelectProps < ValueType , OptionType > ;
171161
172- // TODO: Types test
173- export type SelectProps < OptionType extends BaseOptionType = DefaultOptionType > = Omit <
174- | SingleRawSelectProps < OptionType >
175- | SingleLabeledSelectProps < OptionType >
176- | MultipleRawSelectProps < OptionType >
177- | MultipleLabeledSelectProps < OptionType > ,
178- 'onChange'
179- > & {
162+ export type InternalSelectProps <
163+ ValueType = any ,
164+ OptionType extends BaseOptionType = DefaultOptionType ,
165+ > = Omit < SelectProps < ValueType , OptionType > , 'onChange' > & {
180166 onChange ?: ( value : DraftValueType , option : OptionType | OptionType [ ] ) => void ;
181167} ;
182168
@@ -185,7 +171,7 @@ function isRawValue(value: DraftValueType): value is RawValueType {
185171}
186172
187173const Select = React . forwardRef (
188- ( props : SelectProps < DefaultOptionType > , ref : React . Ref < BaseSelectRef > ) => {
174+ ( props : InternalSelectProps < any , DefaultOptionType > , ref : React . Ref < BaseSelectRef > ) => {
189175 const {
190176 id,
191177 mode,
@@ -661,9 +647,10 @@ if (process.env.NODE_ENV !== 'production') {
661647}
662648
663649const TypedSelect = Select as unknown as ( <
664- Values extends BaseOptionType | DefaultOptionType = DefaultOptionType ,
650+ ValueType = any ,
651+ OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType ,
665652> (
666- props : React . PropsWithChildren < SelectProps < Values > > & {
653+ props : React . PropsWithChildren < SelectProps < ValueType , OptionType > > & {
667654 ref ?: React . Ref < BaseSelectRef > ;
668655 } ,
669656) => React . ReactElement ) & {
0 commit comments