【问题标题】:void' is not assignable to parameter of type '(value: User[], index: number) => boolean'void' 不可分配给类型为 '(value: User[], index: number) => boolean' 的参数
【发布时间】:2017-07-29 09:32:34
【问题描述】:

我有一个名为 User 的模型,并且我的服务中有一个名为 getUsers 的观察者,它可以获取一堆 JSON 对象。

在我的组件中,我有以下内容

@Input() users: User[] = [];

我并尝试像这样使用它:

   getUserByLastName(lastName){

        this._searchService.getUsers()
            .filter(users => {
                for(let user of users) {
                    if(user.lastName == lastName){
                        this.users.push(user);
                    }}})
            .subscribe(users => this.users = users,
                error =>this.errorMessage =<any> error);

        return this.users;

    }

但是.filter(users =&gt; { 这行给了我一个错误提示:

Argument of type '(users: User[]) => void' is not assignable to 
parameter of type '(value: User[], index: number) => boolean'. Type 
'void' is not assignable to type 'boolean

我稍后尝试使用它来初始化变量,以便将其填充到不同的表单中。

case "lastName":
                this.users = this.getUserByLastName(this.lastName);

如果这令人困惑,我有两页。一个是隐藏的,直到在默认页面中单击一行。一个表单位于另一个(隐藏的)表单中,该表单为在表单中选择要编辑的用户(行)填充数据。

【问题讨论】:

    标签: angular


    【解决方案1】:

    我假设你可以有不同的术语来过滤。如果不是,您已经可以将姓氏传递给服务进行过滤,但如果您想在组件中进行过滤,请执行以下操作。如果您需要返回过滤后的数据,看起来,返回它,在你需要它的地方,订阅。所以:

    getUserByLastName(lastName){
       return this._searchService.getUsers()
          .map(data => {
             return data.filter((x: any) => x.lastName == lastName);
          })
    }
    

    在需要的地方订阅:

    this.getUserByLastName(this.lastName)
      .subscribe(data => {
         this.users = data;
      });
    

    【讨论】:

      【解决方案2】:

      这可以使用lodash 轻松实现,如下所示

      users =<User[]> _.pullAllWith(users,{lastName : 'yourparameter'}, _.isEqual);
      

      【讨论】:

        猜你喜欢
        • 2018-08-15
        • 1970-01-01
        • 2023-01-22
        • 1970-01-01
        • 2022-10-02
        • 2022-07-20
        • 2017-01-05
        • 2021-04-18
        • 2021-12-05
        相关资源
        最近更新 更多