Тип компонента Inferred React разбивает типы объектов событий - PullRequest
0 голосов
/ 06 марта 2020

У меня есть компонент Box с обобщенным типом реквизита c as, который используется для расширения JSX.IntrinsicElements[T] и правильного определения его сигнатуры и типов реквизита. Тем не менее, когда используется реквизит события, подпись события является неправильной, если я явно не установлю generi c на сайте вызова.

{/* event typed correctly */}
<Box<"input"> as="input" onChange={event => console.log(event)} />

{/* Box appears to have the same type signature but event not typed correctly, why? */}
<Box as="input" onChange={event => console.log(event)} />

Мое определение компонента выглядит следующим образом:

type As = JSX.IntrinsicElements;

type Props<T extends keyof As> = As[T] & {
  as?: T;
};

function Box<T extends keyof As = "div">({ as, ...props }: Props<T>) {
  const element = (as || "div") as unknown;
  const Component = element as React.ComponentType<Omit<Props<T>, "as">>;

  return <Component {...props} />;
}

Я немного читал, и, похоже, это должно сработать , возвращаясь к версии 2.3 компилятора. Я обнаружил ошибку или я делаю что-то глупое здесь?

https://codesandbox.io/s/loving-faraday-shx9r

...