File tree Expand file tree Collapse file tree 2 files changed +49
-2
lines changed Expand file tree Collapse file tree 2 files changed +49
-2
lines changed Original file line number Diff line number Diff line change @@ -34,11 +34,24 @@ export type SelectProps<Options extends SelectProps.Option[]> = {
3434 value ?: Options [ number ] [ "value" ] ;
3535 onChange ?: (
3636 e : Omit < ChangeEvent < HTMLSelectElement > , "target" | "currentTarget" > & {
37- target : Omit < ChangeEvent < HTMLSelectElement > , "value" > & {
37+ target : Omit < EventTarget & HTMLSelectElement , "value" | "selectedOptions "> & {
3838 value : Options [ number ] [ "value" ] ;
39+ selectedOptions : HTMLCollectionOf <
40+ Omit < HTMLOptionElement , "value" > & {
41+ value : Options [ number ] [ "value" ] ;
42+ }
43+ > ;
3944 } ;
40- currentTarget : Omit < ChangeEvent < HTMLSelectElement > , "value" > & {
45+ currentTarget : Omit <
46+ EventTarget & HTMLSelectElement ,
47+ "value" | "selectedOptions"
48+ > & {
4149 value : Options [ number ] [ "value" ] ;
50+ selectedOptions : HTMLCollectionOf <
51+ Omit < HTMLOptionElement , "value" > & {
52+ value : Options [ number ] [ "value" ] ;
53+ }
54+ > ;
4255 } ;
4356 }
4457 ) => void ;
Original file line number Diff line number Diff line change @@ -262,3 +262,37 @@ import { assert, type Equals } from "tsafe";
262262 } }
263263 /> ;
264264}
265+
266+ {
267+ const dogOrCatOptions = [
268+ {
269+ value : "dog" ,
270+ label : "Dog"
271+ } ,
272+ {
273+ value : "cat" ,
274+ label : "Cat"
275+ }
276+ ] as const ;
277+
278+ type DogOrCat = typeof dogOrCatOptions [ number ] [ "value" ] ;
279+ type SelectTarget = Omit < EventTarget & HTMLSelectElement , "value" | "selectedOptions" > & {
280+ value : DogOrCat ;
281+ selectedOptions : HTMLCollectionOf < Omit < HTMLOptionElement , "value" > & { value : DogOrCat } > ;
282+ } ;
283+ < Select
284+ label = "Dog or cat person?"
285+ options = { [ ...dogOrCatOptions ] }
286+ placeholder = "Select an option"
287+ nativeSelectProps = { {
288+ "onChange" : event => {
289+ assert < Equals < typeof event [ "currentTarget" ] , SelectTarget > > ( ) ;
290+ assert < Equals < typeof event [ "target" ] , SelectTarget > > ( ) ;
291+ const selectedValues = Array . from ( event . target . selectedOptions ) . map (
292+ option => option . value
293+ ) ;
294+ assert < Equals < typeof selectedValues , DogOrCat [ ] > > ;
295+ }
296+ } }
297+ /> ;
298+ }
You can’t perform that action at this time.
0 commit comments