【问题标题】:Type 'Object' is not assignable to type 'any[]' in Angular 4.x app类型“对象”不可分配给 Angular 4.x 应用程序中的类型“任何 []”
【发布时间】:2019-03-08 14:50:15
【问题描述】:

我在打字稿代码中收到以下错误,但不确定为什么有任何想法 - 它是 this.items 变量?

类型“对象”不能分配给类型“任何[]”。 “对象”类型 可分配给极少数其他类型。你的意思是使用“任何” 改为输入?

export class GifpickerComponent implements OnInit {
    public searchTerm : FormControl = new FormControl();
    public items = [];

constructor(private gifpickerService: GifpickerService){
    this.searchTerm.valueChanges
        .subscribe(data => {
            this.gifpickerService.search(data).subscribe(response =>{
                console.log('subscribe', response);
                this.items = response; /* line picked up in error */
            })
        })
}

/* 请求的服务 */

import { Injectable } from '@angular/core';
import { ApiService } from "../../services/api.service";
import { HttpClient,  HttpParams, HttpResponse} from '@angular/common/http';

@Injectable()
export class GifpickerService {

constructor(
    private http: HttpClient,
    private apiService: ApiService
) {}

search(term){
    console.log('term', term);
    let url = this.apiService.getApiUrl('gif/search');
    let params = new HttpParams()
        .set('q', String(term))
        .set('results_only', '1');

    return this.http.get(url, {params: params})
        .map(response => {
            return response;
        });
 }
}

【问题讨论】:

  • 你能展示你的search方法的实现吗?以便我们展示最佳实践?
  • response的类型是什么?
  • @Zabs 你应该输入response。例如,如果响应是一个 SearchResult 数组:return this.http.get<SearchResult[]>(url, {params: params})。顺便说一句,get 之后的map 在您的示例中没有用。然后在组件中为项目添加类型:public items: SearchResult[] = [];

标签: javascript angular typescript


【解决方案1】:

做这个改变

public items = {}

那么事情是,您将项目作为 any 类型的数组,显然响应是 object 类型

【讨论】:

    【解决方案2】:

    这是any[] 的任何项目的数组。

    public items = []
    

    响应可能是一个对象。

    您正在将项目设置为等于一个对象。

    您应该将任何类型的项目设为任何或

    您应该像这样将响应对象推送到 items 数组:

    this.items.push(response)
    

    this.items = [...this.items, response]
    

    取决于你想要什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2021-03-02
      • 2016-11-21
      • 1970-01-01
      相关资源
      最近更新 更多