类型'字符串|的参数用户'不能分配给'string'类型的参数

时间:2017-12-28 16:07:37

标签: javascript typescript angular-material

在以下代码中,出现在角度材质示例中: https://stackblitz.com/angular/gorglnbmork?file=app%2Fautocomplete-display-example.ts

  ngOnInit() {
     this.filteredOptions = this.myControl.valueChanges
      .pipe(
        startWith({} as User),
        map(user => user && typeof user === 'object' ? user.name : user),
        map(name => name ? this.filter(name) : this.options.slice())
      );
  }

我在this.filter(name)上有以下错误:'string |类型的参数用户'不能分配给'string'类型的参数。

为什么?可以采取哪些措施来避免它?

在此帖后添加:

我通过对filter的参数进行以下更改来纠正错误:

filter(name: string | User): User[] {
    return this.options.filter(option =>
      option.name.toLowerCase().indexOf(name.toLowerCase()) === 0);
}

但我不知道什么是字符串|用户意味着在此之后,name.toLowerCase()上存在一个问题,如字符串|用户没有方法toLowerCase()

感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

您的用户的用户类型不是字符串。问题在于你的

displayFn(user: User): string {
    return user ? user.name : user.name;
  }

您希望返回的值属于User类型,但是对于"!user"返回来自User类型而不是string的用户。 因此,您可以将函数的类型指定为字符串|用户或尝试始终返回一个字符串。