могу решить проблему на уровнее типизации, а именно в передаче файлов в функцию onChange при multiple true/false. Ошибка такая - что ts не может понять какие файлы ему стоит ожидать (скрин)
interface FileButtonProps<T extends boolean | undefined> {
multiple?: T
onChange: (data: T extends true ? File[] : File | null) => void
}
const FileButton = <T extends boolean | undefined = false>({
multiple,
onChange,
}: FileButtonProps<T>) => {
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const files = event.target.files
if (!files) return onChange(null)
if (multiple) {
onChange(Array.from(files))
} else {
onChange(files[0])
}
}
Лучше в onChange передавать union так же, как это сделано нативно. Сомневаюсь, что типами это получится решить. Дженерики — не панацея.
Обсуждают сегодня