2017-06-23 8 views
10

Ich habe gerade zwei wichtige Upgrades für unsere Angular 4-Anwendung und Build-Tools:Typ 'Headers' hat keine Eigenschaften gemeinsam mit dem Typ 'RequestOptionsArgs'?

  1. @ Winkel/Kern^4.1.3 =>^4.2.4 (und/http,/Formulare, etc.)
  2. tslint^5.3.2 =>^5.4.3

ich habe einen Dienst, die Optionen wie erklärt so:

@Injectable() 
export class WorkOrderService { 

    private headers: Headers = new Headers({ 'Content-Type': 'application/json' }); 
    private options: RequestOptions = new RequestOptions(this.headers); 

    constructor(private http: Http) {} 

    /* Methods ... */ 
} 

Die oben jetzt nicht mehr validiert tslint, wirft die folgenden Fehler:

error TS2559: Type 'Headers' has no properties in common with type 'RequestOptionsArgs'.

Die Quelle (@ Winkel/http interface.d.ts:43) erlaubt deutlich für Headers als RequestOptionsArgs:

/** 
* Interface for options to construct a RequestOptions, based on 
* [RequestInit](https://fetch.spec.whatwg.org/#requestinit) from the Fetch spec. 
* 
* @experimental 
*/ 
export interface RequestOptionsArgs { 
    url?: string | null; 
    method?: string | RequestMethod | null; 
    /** @deprecated from 4.0.0. Use params instead. */ 
    search?: string | URLSearchParams | { 
     [key: string]: any | any[]; 
    } | null; 
    params?: string | URLSearchParams | { 
     [key: string]: any | any[]; 
    } | null; 
    headers?: Headers | null; 
    body?: any; 
    withCredentials?: boolean | null; 
    responseType?: ResponseContentType | null; 
} 

Antwort

21

-Update für 4.3 HttpClient

Die neue Syntax kompatibel mit HttpClient, in Winkel 4.3 eingeführt wird, ist:

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

private _options = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) }; 

nicht mehr RequestOptions: Parameter hinzugefügt, um die neue unveränderliche HttpParams Karte.

Pre 4,3/Http

ich nur bemerkt, dass RequestOptions jetzt Sie erfordert explizit als Objekt mit dem Namen Optionen zu übergeben, wie:

headers: Headers = new Headers({ 'Content-Type': 'application/json' }); 
options: RequestOptions = new RequestOptions({ headers: this.headers }); 
+1

ich habe laufen in ähnlichen Problem zu sein, danken die für die Bereitstellung von eine Lösung –

+0

Ich glaube, Sie brauchen nur Klammern um Ihre this.headers. neue RequestOptions ({this.headers}); – LLai

+2

@LLai Die Destrukturierung von Objekten funktioniert in diesem Fall nicht, weil * this. *: 'Argument of type '{this: any; } 'kann nicht dem Parameter' RequestOptionsArgs 'zugewiesen werden. Das Objektliteral darf nur bekannte Eigenschaften angeben, und "das" existiert nicht im Typ "RequestOptionsArgs". Das hatte ich mir aber auch erhofft. – msanford

Verwandte Themen