React Typescript SetStateAction Generi c mixup? - PullRequest
3 голосов
/ 07 мая 2020

Я лично не знал, как сформулировать этот вопрос. Проблема, с которой я столкнулся, заключается в том, что я передаю хук setState в дочерний компонент, но это не всегда одно и то же действие setState, если это имеет смысл.

Например, допустим, у меня есть setState(a) который ожидает параметр string, и тот же дочерний компонент может в конечном итоге получить setState(b), который ожидает параметр number ... теперь на самом деле параметры, которые ожидает дочерний элемент, являются разными типами дженерики, если это имеет смысл.

Итак, для простоты я бы создал компонент, который ожидает одну опору, которая будет включать либо setState(a), либо setState(b). Теперь я получаю сообщение об ошибке, в котором говорится, что тип React.Dispatch<React.SetStateAction<string | number | undefined>> не может быть назначен типу React.Dispatch<React.SetStateAction<string | undefined>>

. Как мне установить его, чтобы он мог ожидать либо string, number, либо undefined. Понимая, что в некоторых ситуациях число даже не является для него вариантом, или строка даже не является вариантом для его принятия в качестве параметра. Я новичок в Typescript и пытаюсь понять, как лучше всего работать с ним и React одновременно! (Я тоже новичок в хуках!)

Заранее всем спасибо !!

Изменить: лучший пример

  const [a, setA] = useState<string | undefined>();
  const [b, setB] = useState<number | undefined>();

  if (something) {
    return (
      <CustomChildComponent useThisState={setA}/>
    )
  } else if (somethingElse) {
    return (
      <CustomChildComponent useThisState={setB}/>
    )
  }

Ошибка в CustomChildComponent при передаче в этой опоре скажет:

(JSX attribute) useThisState: React.Dispatch<React.SetStateAction<string | number | undefined>> Type 'Dispatch<SetStateAction<string | undefined>>' is not assignable to type 'Dispatch<SetStateAction<string | number | undefined>>'.

Надеюсь, это немного проясняет проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...