如何检查管道中未定义的项目

How to check undefined items in a pipe?

本文关键字:未定义 项目 管道 何检查 检查      更新时间:2023-09-26

我使用Angular2和自定义管道来过滤我的项目,如:

transform(value: any, args: string[]): any {
   if (args) {
         return value.filter(foo => foo.url.indexOf(args) != -1)
   };
   return value;
}

但是我的一些foo.url项目是未定义的,我得到了这个错误:

TypeError: Cannot read property 'indexOf' of undefined

如何检查属性是否未定义并且将被筛选?

您正在使用TypeScript,因此是时候开始利用它带来的所有好处了。与其用类型为any的参数编写此transform函数,不如指定类型。这将有助于缓解像这样愚蠢的运行时问题。您显然假设value参数是一个数组,所以将其声明为一个数组(我们将对返回类型执行同样的操作)。那么它是什么类型的数组,让我们来演示一下。。。而不是:

transform(value: any, args: string[]): any {
   if (args) {
         return value.filter(foo => foo.url.indexOf(args) != -1)
   };
   return value;
}

让我们这样写:

transform(value: Foo[], args: string[]): Foo[] {
   if (args) {
         return value.filter(foo => foo.url.indexOf(args) != -1)
   };
   return value;
}

然后我们可以有一个表示Foo:的类

export class Foo {
    constructor(url: string);
}

这将确保有助于防止属性url在运行时为undefined的运行时问题。

你可以试试这个:

transform(value: any, args: string[]): any {
  if (args) {
     return value.filter(foo => {
       return (foo.url && (foo.url.indexOf(args) != -1));
     });
  }
  return value;
}