title: TypeScript: Incompatible overload signatures
body: <p>I am overloading a function in TypeScript like this:</p>
  <pre><code>public fireEvent(eventName: string): void;
  public fireEvent&lt;T&gt;(eventName: string, messageDTO: T): void;
  public fireEvent&lt;T, D&gt;(eventName: string, messageDTO: T, dataCallback: Callback&lt;void, [D]&gt;): void;
  public fireEvent&lt;D&gt;(eventName: string, dataCallback: Callback&lt;void, [D]&gt;): void {
      //
  }
  </code></pre>
  <p>The mentioned <code>Callback&lt;void, [D]&gt;</code> implementation is:</p>
  <pre><code>type Callback&lt;TReturn = unknown, TArgs extends any[] = []&gt; = (...args: TArgs) =&gt; TReturn;
  </code></pre>
  <p>But I'm encountering compile time error message:</p>
  <pre><code>TS2394: This overload signature is not compatible with its implementation signature
  </code></pre>
  <p>I can't understand how this is not compatible, as I have declared all possible call signatures.</p>
  <p>Any help would be appreciated. Thanks :)</p>