title: Overloads cannot differ only by return type
body: <p>I'm trying to overload a function so when using the function somewhere else, it will show the result properly that is either an array of items, void, or a single item:</p>
  
  <pre class="lang-typescript prettyprint-override"><code>getSelected(type): void;
  getSelected(type): IDataItem;
  getSelected(type): IDataItem[];
  getSelected(type:string, one:boolean = true):any {
     if (!type) {
         return;
     }
     if (one) {
        return _.reduce&lt;IDataItem, IDataItem&gt;(sections[type], (current: IDataItem, p: IDataItem) =&gt; {
           return p.selected === true ? p : current;
        }, void 0);
     }
  
     return _.filter&lt;IDataItem&gt;(sections[type], (p: IDataItem):boolean =&gt; {
       return p.selected === true &amp;&amp; p.enabled === true;
     });
  }
  </code></pre>
  
  <p>It's giving me the error <strong>"error TS2175: Overloads cannot differ only by return type."</strong>. How can I just signal the many possibilities for the return types then?</p>