import * as React from 'react'; import Autocomplete, { AutocompleteProps, AutocompleteRenderGetTagProps, } from '@mui/material/Autocomplete'; import TextField from '@mui/material/TextField'; import { expectType } from '@mui/types'; interface MyAutocompleteProps< T, Multiple extends boolean | undefined, DisableClearable extends boolean | undefined, FreeSolo extends boolean | undefined, > extends AutocompleteProps { myProp?: string; } function MyAutocomplete< T, Multiple extends boolean | undefined = undefined, DisableClearable extends boolean | undefined = undefined, FreeSolo extends boolean | undefined = undefined, >(props: MyAutocompleteProps) { return ; } // multiple prop can be assigned for components that extend AutocompleteProps { expectType(value); }} renderInput={() => null} multiple />; { expectType(value); }} renderInput={() => null} />; { expectType(value); }} renderInput={() => null} disableClearable />; { expectType(value); }} renderInput={() => null} freeSolo />; // Test for getInputProps return type } />; interface Option { label: string; value: string; } const options: Option[] = [ { label: '1', value: '1' }, { label: '2', value: '2' }, ]; const defaultOptions = [options[0], options[1]]; o.label === v.label} getOptionLabel={(o) => o.label} renderInput={() => null} />; interface Tag { color: string; label: string; } type TagComponentProps = Tag & React.HTMLAttributes; function TagComponent({ color, label, ...other }: TagComponentProps) { return
{label}
; } function renderTags(value: Tag[], getTagProps: AutocompleteRenderGetTagProps) { return value.map((tag: Tag, index) => { const { onDelete, ...tagProps } = getTagProps({ index }); return ; }); } function AutocompleteComponentsProps() { return ( } componentsProps={{ clearIndicator: { size: 'large' }, paper: { elevation: 2 }, popper: { placement: 'bottom-end' }, popupIndicator: { size: 'large' }, }} /> ); }