File tree Expand file tree Collapse file tree 2 files changed +29
-3
lines changed
packages/mui-material/src/Select Expand file tree Collapse file tree 2 files changed +29
-3
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ import * as React from 'react';
2
2
import Select , { SelectChangeEvent , SelectProps } from '@mui/material/Select' ;
3
3
import MenuItem from '@mui/material/MenuItem' ;
4
4
import { createTheme } from '@mui/material/styles' ;
5
+ import { expectType } from '@mui/types' ;
5
6
6
7
function genericValueTest ( ) {
7
8
function handleChangeWithSameTypeAsSelect ( event : SelectChangeEvent < number > ) { }
@@ -199,3 +200,25 @@ const AppSelect = <T extends string>(props: Props<T>) => {
199
200
200
201
// test for applying Select's static muiName property type to wrapper components
201
202
AppSelect . muiName = Select . muiName ;
203
+
204
+ < Select < 'option1' | 'option2' >
205
+ value = "option1"
206
+ onChange = { ( event ) => {
207
+ expectType < 'option1' | 'option2' , typeof event . target . value > ( event . target . value ) ;
208
+ } }
209
+ >
210
+ < MenuItem value = "option1" />
211
+ { /* Whoops. The value in onChange won't be a string */ }
212
+ < MenuItem value = "option2" />
213
+ </ Select > ;
214
+
215
+ < Select < number | '' >
216
+ value = { 1 }
217
+ onChange = { ( event ) => {
218
+ expectType < number | '' , typeof event . target . value > ( event . target . value ) ;
219
+ } }
220
+ >
221
+ < MenuItem value = { 1 } />
222
+ { /* Whoops. The value in onChange won't be a string */ }
223
+ < MenuItem value = { 2 } />
224
+ </ Select > ;
Original file line number Diff line number Diff line change @@ -8,9 +8,12 @@ import { MenuProps } from '../Menu';
8
8
* The type of event depends on what caused the change.
9
9
* For example, when the browser auto-fills the `Select` you'll receive a `React.ChangeEvent`.
10
10
*/
11
- export type SelectChangeEvent < Value = string > =
12
- | ( Event & { target : { value : Value ; name : string } } )
13
- | React . ChangeEvent < HTMLInputElement > ;
11
+
12
+ export type SelectChangeEvent < Value = string > = Value extends ( string & { } ) | number
13
+ ?
14
+ | React . ChangeEvent < Omit < HTMLInputElement , 'value' > & { value : Value } >
15
+ | ( Event & { target : { value : Value ; name : string } } )
16
+ : React . ChangeEvent < HTMLInputElement > | ( Event & { target : { value : Value ; name : string } } ) ;
14
17
15
18
export interface SelectInputProps < Value = unknown > {
16
19
autoFocus ?: boolean ;
You can’t perform that action at this time.
0 commit comments