@wvw1

Функция1 принимает в аргументы функцию2. Как функции3 передать в аргументы типы аргументов функции2 + еще один?

import { useState, useEffect, FC } from 'react'

interface UseControlledProps<Value, ChangeHandler> {
  defaultValue: Value
  onChange: ChangeHandler // (...args: any) => any
  // вот как мне задать это значение?
}

function useControlled<Value, ChangeHandler>({
  defaultValue,
  onChange
}: UseControlledProps<Value, ChangeHandler>) {
  //
  const [state, setState] = useState(defaultValue)

  useEffect(() => {
    if (defaultValue !== state) {
      setState(defaultValue)
    }
  }, [defaultValue])

  type Params = Parameters<ChangeHandler> // Type 'ChangeHandler' does not satisfy the constraint '(...args: any) => any'

  return [
    state,
    //
    (value: Value, ...params: Params) => {
      setState(value)
      onChange(...params)
    },
  ] as const
}

interface CustomInputProps {
  defaultValue: string
}

// пример использования
const CustomInput: FC<CustomInputProps> = ({ defaultValue }) => {
  const onChange = (str: string, ggg?: boolean) => {
    console.log(str) // бульбульбуль
  }

  const [value, setValue] = useControlled({ defaultValue, onChange })

  const handleInput = (event) => {
    setValue(event.target.value, 'бульбульбуль') //
  }

  return <input value={value} onChange={handleInput} />
}


625943b809c29588438792.png
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы