Почему равно числу только найти строки в FireBase?

Я пытаюсь простой запрос:

@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, которые являются строками, а остальные числа. Я собираюсь сделать их все номера в ближайшее время. Но по какой-то причине это только возвращает результаты, чей jobId отформатирован как строка, и не возвращает никого, чей jobId является целым числом.

Приведенный выше код возвращает комментарии только в том случае, если их jobId выглядит так в FireBase:

jobId: "1"

но не это

jobId: 1

1 ответ

Решение

<number> является приведением TypeScript. Он статический и просто сообщает TypeScript, что значение number,

Во время выполнения это ничего не значит. Если this.id содержит строку, значение которой передается equalTo будет строка, а не число, и она будет соответствовать "1" в Firebase.

Если вы хотите убедиться, что значение присвоено equalTo это число, вы можете сделать что-то вроде этого:

query: {
  orderByChild: 'jobId',
  equalTo: Number.parseInt(this.id, 10)
}
Другие вопросы по тегам