У меня есть раскрывающийся компонент с обратным вызовом onSelect:(option: string) => void
Я использую его как средство выбора сортировки в одном приложении, где параметры имеют тип перечисления:
enum SORT_OPTIONS {
LATEST = 'LATEST',
OLDEST = 'OLDEST'
}
const onSortSelect = (val: SORT_OPTIONS) => {...}
<MyDropdown onSelect={onSortSelect} ... />
И машинописный текст жалуется:
Type '(val: SORT_OPTIONS) => void' is not assignable to type '(option: string) => void'.
Types of parameters 'val' and 'option' are incompatible.
Type 'string' is not assignable to type 'SORT_OPTIONS'. TS2322
Это немного противоречит интуиции, но имеет смысл, поскольку в MyDropdown
строка option
будет передана в обратный вызов onSortSelect
, для которого требуется значение перечисления.
Вопрос как лучше всего исправить типы здесь? IMO обе функции набраны правильно, onSelect
должен принимать любую строку, поскольку MyDropdown
может использоваться в любом контексте. onSortSelect
должен принимать только SORT_OPTIONS
.
В настоящее время я использую тип onSortSelect: <MyDropdown onSelect={onSortSelect as (val:string) => void} ... />
, но он кажется довольно подробным