Open2

Listを題材に、Material-UIの型システムを掘り下げる

まつだけまつだけ
/**
 * A component whose root component can be controlled via a `component` prop.
 *
 * Adjusts valid props based on the type of `component`.
 */
export interface OverridableComponent<M extends OverridableTypeMap> {
  <C extends React.ElementType>(
    props: {
      /**
       * The component used for the root node.
       * Either a string to use a HTML element or a component.
       */
      component: C;
    } & OverrideProps<M, C>,
  ): JSX.Element;
  (props: DefaultComponentProps<M>): JSX.Element;
}

OverridableComponentの構造を読み解く。
この型自体は、component属性でHTMLタグを変更できるものに対して与えられる型である。