kentcdodds/mdx-bundler

Props type for overriden components

kwiat1990 opened this issue · 0 comments

Hi, I'm wondering if there's some typing I could use when overriding HTML elements like this:

const components = {
  img: ({
    src,
    ...attrs
    }: React.DetailedHTMLProps<
      React.ImgHTMLAttributes<HTMLImageElement>,
      HTMLImageElement
    >) => {
      return (
        <Image
          dprVariants={[2, 3]}
          placeholder="blur"
          responsive={[
	  {
            size: {
              width: 400,
            }
            maxWidth: 500,
	  }
        ]}
        src={src}
        {...attrs}
    />
  );
}}

export function MDXComponent({ component }: Props) {
  const Component = React.useMemo(
    () => getMDXComponent(component),
    [component],
  );
  return <Component components={components} />;
}

With the types it doesn't work because Image component have placeholder prop, which make Typescript complains about: Type 'string' is not assignable to type '"blur" | "empty" | undefined'.ts(2322) types.d.ts(16, 5): The expected type comes from property 'placeholder' which is declared here on type 'IntrinsicAttributes & ImageProps'. Similar problem comes up when using<div> inside an <li> element and so one. Is there some way to make Typescript happy?