У меня есть компонент 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