title: How to define TypeScript type for object wrapper that has string as a key & React SFC as a value?
body: <p>Following is the Form component</p>
  
  <pre><code>import React from 'react';
  import { Elements } from '@helpers/ImportProxy';
  import { mockApi } from '@constants/api';
  
  type Props = {
    // formValues: any
  };
  
  type MapKindToComponentT = {
    [key: string]: React.SFC
  }
  
  /** @component */
  export const Form: React.SFC&lt;Props&gt; = __props =&gt; {
    const renderQuestions = () =&gt;
      mockApi.map(
        (question, index): React.ReactElement | undefined =&gt; {
          const mapKindToComponent: MapKindToComponentT = {
              radio:        Elements.RadioElement,
              text:         Elements.InputElement,
              email:        Elements.InputElement,
              url:          Elements.InputElement,
              checkbox:     Elements.CheckBoxElement,
              dropdown:     Elements.SelectElement,
              textarea:     Elements.TextareaElement,
          };
          if(mapKindToComponent[question.kind]) {
            const Element = mapKindToComponent[question.kind];
            return &lt;Element key={index} question={question} /&gt;;
          }
        }
      );
  
    return (
      &lt;form&gt;
        {renderQuestions()}
        &lt;div&gt;
          &lt;button type="submit"&gt;Submit&lt;/button&gt;
        &lt;/div&gt;
      &lt;/form&gt;
    );
  };
  
  export default Form;
  </code></pre>
  
  <p>Value of each key of <code>mapKindToComponent</code> is React functional component. </p>
  
  <p>Following is the error I get for it's currently defined type. Works fine with <code>any</code>.</p>
  
  <blockquote>
    <p>Type error: Type 'FunctionComponent' is not assignable to type
    'FunctionComponent&lt;{}>'.   Types of property 'propTypes' are
    incompatible.
        Type 'WeakValidationMap | undefined' is not assignable to type 'WeakValidationMap&lt;{}> | undefined'.
          Type 'WeakValidationMap' is not assignable to type 'WeakValidationMap&lt;{}>'.
            Type '{}' is not assignable to type 'Props'.  TS2322</p>
  </blockquote>