title: Get Observable<T> from HttpClient.get with options
body: <p>Usually, I perform a get request using Angular HttpClient like in this example:</p>
  
  <pre><code>this.http
     .get&lt;Project&gt;('/api/projects/' + id)
     .subscribe(p =&gt; {
      // p is typed as Project
      this.project = p;
    });
  </code></pre>
  
  <p>The type parameter <code>Project</code> defines the expected response. <code>HttpCLient.get&lt;T&gt;()</code> returns an <code>Observable&lt;T&gt;</code>.</p>
  
  <p>I now need to add some options to the request, like i.e. so:</p>
  
  <pre><code>getRequestOptions() {
     var headers = new HttpHeaders();
     headers.append('Authorization', 'Basic ' + this.auth.EMail + ':' + this.auth.Token);
     return { headers: this.getRequestOptions() };
  }
  
  // Somewhere else   
  this.http.get&lt;Project&gt;(url, this.getRequestOptions())
           .subscribe(p =&gt; { 
               // p is HttpEvent&lt;Project&gt; with no (direct?) access to the
               // returned object, just a property called type
           });
  </code></pre>
  
  <p>This calls a different overload of the <code>get()</code> method, which for some reasons return not an <code>Observable&lt;T&gt;</code> but an <code>Observable&lt;HttpEvent&lt;T&gt;&gt;</code>. Apart from that being bad design in my opinion:</p>
  
  <p>How do I use HttpEvent? It only contains one property called <code>type</code>. I am aware that there are derived types, in case of a get request probably <code>HttpResponse&lt;T&gt;</code>. Do I really need to deal with all that type switching and casting stuff, just because I am using RequestOptions?</p>
  
  <p>What is the background of this design decision? Why don' all overloads return the same type and share a common usage pattern?</p>