Angular 4.3.3 HttpClient: ¿Cómo obtener valor del encabezado de una respuesta?

(Editor: Código VS; Mecanografiado: 2.2.1)

El propósito es obtener los encabezados de la respuesta de la solicitud.

Asumir una solicitud POST con HttpClient en un servicio

import {
    Injectable
} from "@angular/core";

import {
    HttpClient,
    HttpHeaders,
} from "@angular/common/http";

@Injectable()
export class MyHttpClientService {
    const url = 'url';

    const body = {
        body: 'the body'
    };

    const headers = 'headers made with HttpHeaders';

    const options = {
        headers: headers,
        observe: "response", // to display the full response
        responseType: "json"
    };

    return this.http.post(sessionUrl, body, options)
        .subscribe(response => {
            console.log(response);
            return response;
        }, err => {
            throw err;
        });
}

Documentación angular de HttpClient

El primer problema es que tengo un error de Typecript:

'Argument of type '{ 
    headers: HttpHeaders; 
    observe: string; 
    responseType: string;
}' is not assignable to parameter of type'{ 
    headers?: HttpHeaders;
    observe?: "body";
    params?: HttpParams; reportProgress?: boolean;
    respons...'.

Types of property 'observe' are incompatible.
Type 'string' is not assignable to type '"body"'.'
at: '51,49' source: 'ts'

De hecho, cuando voy al método ref of post (), apunto a este prototipo (uso el código VS)

post(url: string, body: any | null, options: {
        headers?: HttpHeaders;
        observe?: 'body';
        params?: HttpParams;
        reportProgress?: boolean;
        responseType: 'arraybuffer';
        withCredentials?: boolean;
    }): Observable<ArrayBuffer>;

Pero quiero este método sobrecargado:

post(url: string, body: any | null, options: {
    headers?: HttpHeaders;
    observe: 'response';
    params?: HttpParams;
    reportProgress?: boolean;
    responseType?: 'json';
    withCredentials?: boolean;
}): Observable<HttpResponse<Object>>;

Entonces, intenté arreglar este error con esta estructura:

  const options = {
            headers: headers,
            "observe?": "response",
            "responseType?": "json",
        };

Y se compila! Pero acabo de recibir la solicitud del cuerpo como en formato json.

Además, ¿por qué tengo que poner un? símbolo al final de algún nombre de campo? Como vi en el sitio de Typecript, ¿este símbolo debería decirle al usuario que es opcional?

¿También intenté usar todos los campos, sin y con? marcas

EDITAR

Probé las soluciones propuestas porAngular 4 obtiene encabezados de la respuesta API. Para la solución del mapa:

this.http.post(url).map(resp => console.log(resp));

El compilador de mecanografía dice que el mapa no existe porque no es parte de Observable

También probé esto

import { Response } from "@angular/http";

this.http.post(url).post((resp: Response) => resp)

Se compila, pero recibo una respuesta de tipo de medio no compatible. Estas soluciones deberían funcionar para "Http" pero no en "HttpClient".

EDITAR 2

También obtengo un tipo de medio no compatible con la solución @Supamiu, por lo que sería un error en mis encabezados. Entonces, la segunda solución desde arriba (con el tipo de respuesta) también debería funcionar. Pero personalmente, no creo que sea una buena manera de mezclar "Http" con "HttpClient", así que mantendré la solución de Supamiu

Respuestas a la pregunta(4)

Su respuesta a la pregunta