类型'标题'没有与'RequestOptionsArgs'类型相同的属性?

时间:2017-06-23 19:34:41

标签: angular typescript

我刚刚对Angular 4应用程序和构建工具进行了两次重要的升级:

  1. @ angular / core ^4.1.3 => ^4.2.4(和/ http,/ forms等)
  2. tslint ^5.3.2 => ^5.4.3
  3. 我有一个服务,它声明了这样的选项:

    @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 ... */
    }
    

    上面现在不再验证tslint,抛出以下错误:

      

    错误TS2559:类型'标题'没有与'RequestOptionsArgs'类型相同的属性。

    来源(@ angular / http interface.d.ts:43)明确允许Headers作为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;
    }
    

1 个答案:

答案 0 :(得分:31)

4.3 HttpClient

的更新

在角度4.3中引入的与HttpClient兼容的新语法是:

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

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

不再使用新的HttpParams地图添加RequestOptions:参数。

Pre 4.3 / Http

只是注意到RequestOptions现在要求您明确地将命名选项作为对象传递,例如:

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