title: Using call on a union of multiple function types differing by return type
body: <p>My function has a callback typed as a union of multiple function types, each having the same set of formal arguments, but different return types. This code:</p>
  <pre><code>type FA = () =&gt; string;
  type FB = () =&gt; number;
  
  function f( callback: FA | FB ) {
      callback.call( {} );
  }
  </code></pre>
  <p>... produces TS2684 error:</p>
  <pre><code>(TS) The 'this' context of type 'FA | FB' is not assignable to method's 'this' of type '(this: {}) =&gt; string'.
      Type 'FB' is not assignable to type '(this: {}) =&gt; string'.
          Type 'number' is not assignable to type 'string'.
  </code></pre>
  <p>However, this:</p>
  <pre><code>type FixCallbackUnion&lt;T extends ( this: ThisParameterType&lt;T&gt;, ...a: any ) =&gt; any&gt; =
      ( this: ThisParameterType&lt;T&gt;, ...a: Parameters&lt;T&gt; ) =&gt; ReturnType&lt;T&gt;;
  
  type FA = () =&gt; string;
  type FB = () =&gt; number;
  
  function f( callback: FA | FB ) {
      ( &lt;FixCallbackUnion&lt;typeof callback&gt;&gt;callback ).call( {} );
  }
  </code></pre>
  <p>... compiles normally while seemingly keeping all the involved types exactly the same.</p>
  <p>How can I fix the first example to make it work, or do I have to use a workaround from the second one?</p>