Angular 为什么equalTo number只能在FireBase中查找字符串?

Angular 为什么equalTo number只能在FireBase中查找字符串?,angular,angularfire2,Angular,Angularfire2,我正在尝试一个简单的查询: @Input('jobId') id: number; comments: FirebaseListObservable<any>; this.comments = this.af.database.list('comments/jobComments', { query: { orderByChild: 'jobId', equalTo: <number>this.id } }).map((array) =>

我正在尝试一个简单的查询:

@Input('jobId') id: number;

comments: FirebaseListObservable<any>;

this.comments = this.af.database.list('comments/jobComments', {
  query: {
    orderByChild: 'jobId',
    equalTo: <number>this.id
  }
}).map((array) => array.reverse()) as FirebaseListObservable<any[]>;
但不是这个:

jobId: 1
是一种类型脚本转换。它是静态的,只是告诉TypeScript值是一个
数字

在运行时,这并不重要。如果
this.id
包含字符串,则传递给
equalTo
的值将是一个字符串,而不是一个数字,并且它将仅与Firebase中的
“1”
匹配

如果要确保分配给
equalTo
的值是一个数字,可以执行以下操作:

查询:{
orderByChild:'jobId',
equalTo:Number.parseInt(this.id,10)
}

我得到一个“number”类型的错误参数不能分配给“string”类型的参数。实际上,this.id是一个数字。然后,在运行时的某个地方,它必须实际分配一个字符串。如果Firebase仅匹配
“1”
,则该值为。您可以将其更改为
Number.parseInt(this.id为any,10)
,也可以尝试在运行时查找将其设置为字符串的位置和原因。我还可以将其作为字符串写入FireBase,而不仅仅是搜索。但这是一个数字,我发誓最后的评论做到了!如果要与其他类型进行比较,请尝试使用orderByChild代替equalTo。示例:query.orderByChild(“primary_id”).equalTo(1);
jobId: 1