Здравствуйте, я пытаюсь сделать этот урок о том, как сделать соединение в firebase с помощью angular: https://medium.com/@joaqcid / how-to-inner-join-data-from-множественных коллекций на angular -firebase-bfd04f6b36b7
my othercomponent.ts ngOnInit:
this.joined$ = this.afs.collection<ChatInterface>('chats').valueChanges()
.pipe(
switchMap(blogPosts => {
const authorIds = uniq(blogPosts.map(bp => bp.uid))
return combineLatest(
of(blogPosts),
combineLatest(
authorIds.map(uid =>
this.afs.collection<User>('users', ref => ref.where('uid', '==', uid)).valueChanges().pipe(
map(authors => authors[0])
)
)
)
)
}),
map(([blogPosts, authors]) => {
return blogPosts.map(blogPost => {
return {
...blogPost,
author: authors.find(a => a.id === blogPost.uid)
}
})
})
)
Похоже, что за ним легко следить, но я не знаю, что могу ошибаться (angular 8 и учебник 7, возможно, изменил поиск?), но я получаю ошибку TS2339: Свойство 'id' не существует для типа 'unknown'. on line: author: authors.find(a => a.id === blogPost.uid)
Уроки stackblitz: https://stackblitz.com/edit/angular-firebase-join-data?file=src%2Fapp%2Fapp.component.ts
Мой интерфейс чата:
export interface ChatInterface {
groupId: string;
uid: string;
content: string;
file: string;
date: number;
}
Мой пользовательский интерфейс:
export interface User {
uid: string;
email: string;
displayName: string;
photoURL: string;
emailVerified: boolean;
}
Единственное отличие, которое я мог найти с кодом против этого, это то, что он обнаруживается как любой, а не строка: это стекблиц:
Это мой код:
и авторы определяются как неизвестные вместо пользователя