void' 不可分配给类型为 '(value: User[], index: number) => boolean' 的参数

Posted

技术标签:

【中文标题】void\' 不可分配给类型为 \'(value: User[], index: number) => boolean\' 的参数【英文标题】: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);

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

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于void' 不可分配给类型为 '(value: User[], index: number) => boolean' 的参数的主要内容,如果未能解决你的问题,请参考以下文章

类型 '() => void' 不可分配给类型 '() => '

分页 - 类型“void”不可分配给类型“PageEvent”

错误:类型“void”不可分配给类型“ReactNode”

使用反应成帧器类型'()=> void'的打字稿错误不可分配给类型'未定义'

React 错误:类型“void”不可分配给 React.Component 中的类型“Readonly<>”

如何修复类型 'AsymmetricMatcher<any>' 不可分配给类型 '() => void'。在茉莉花/开玩笑