title: Record<string, unknown> is missing the properties of CustomType
body: <p>I have this setup in my project:</p>
  <pre class="lang-js prettyprint-override"><code>interface GenericFn&lt;TInput extends Record&lt;string, unknown&gt;, TOutput extends Record&lt;string, unknown&gt;&gt; {
      (input: TInput): TOutput;
  }
  
  type AddNumberInput = {
      number1: number;
      number2: number;
  };
  
  type AddNumberOutput = {
      sum: number;
  };
  </code></pre>
  <p>And whenever I try to do this:</p>
  <pre class="lang-js prettyprint-override"><code>const fn1: GenericFn&lt;AddNumberInput, AddNumberOutput&gt; = (input) =&gt; { 
      return { sum: input.number1 + input.number2 }; 
  };
  
  const fn2: GenericFn&lt;Record&lt;string, unknown&gt;, Record&lt;string, unknown&gt;&gt; = fn1; // ERROR 2322
  </code></pre>
  <p>I get this error:</p>
  <pre><code>Type 'GenericFn&lt;AddNumberInput, AddNumberOutput&gt;' is not assignable to type 'GenericFn&lt;Record&lt;string, unknown&gt;, Record&lt;string, unknown&gt;[]&gt;'.
  
    Type 'Record&lt;string, unknown&gt;' is missing the following properties from type 'AddNumberInput': number1, number2 ts(2322)
  </code></pre>
  <p>However, I have confirmed that <code>AddNumberInput</code> and <code>AddNumberOutput</code> can be assigned to type <code>Record&lt;string, unknown&gt;</code>:</p>
  <pre class="lang-js prettyprint-override"><code>const type1: AddNumberInput = {
      number1: 1,
      number2: 2
  };
  const type2: AddNumberOutput = {
      sum: 3
  };
  
  let genericType: Record&lt;string, unknown&gt;;
  genericType = type1; // No errors
  genericType = type2; // No errors
  </code></pre>
  <p>How should this be done instead? I would like to store each generic function in an object collection, like so:</p>
  <pre class="lang-js prettyprint-override"><code>const fns: {
      [id: string]: GenericFn&lt;Record&lt;string, unknown&gt;, Record&lt;string, unknown&gt;&gt;
  } = {};
  
  fns[&quot;fn1&quot;] = fn1; // ERROR 2322
  </code></pre>
  <p>but I cannot seem to store them because of this error. How should this be implemented instead? Thanks!</p>
  <p>Edit: As requested, here is my tsconfig.json:</p>
  <pre class="lang-json prettyprint-override"><code>{
    &quot;compilerOptions&quot;: {
      &quot;target&quot;: &quot;es5&quot;,
      &quot;lib&quot;: [
        &quot;dom&quot;,
        &quot;dom.iterable&quot;,
        &quot;esnext&quot;
      ],
      &quot;allowJs&quot;: true,
      &quot;skipLibCheck&quot;: true,
      &quot;esModuleInterop&quot;: true,
      &quot;allowSyntheticDefaultImports&quot;: true,
      &quot;strict&quot;: true,
      &quot;forceConsistentCasingInFileNames&quot;: true,
      &quot;noFallthroughCasesInSwitch&quot;: true,
      &quot;module&quot;: &quot;esnext&quot;,
      &quot;moduleResolution&quot;: &quot;node&quot;,
      &quot;resolveJsonModule&quot;: true,
      &quot;isolatedModules&quot;: true,
      &quot;noEmit&quot;: true,
      &quot;jsx&quot;: &quot;react&quot;
    },
    &quot;include&quot;: [
      &quot;src&quot;
    ]
  }
  </code></pre>
  <p>If I'm not mistaken, this is the <code>tsconfig.json</code> that comes with the Create-React-App Typescript template.</p>