с @ angular / fire вы можете сделать следующее
constructor(private firestore: AngularFirestore) {
}
getUserByUserId(userId: string) {
return this.firestore
.collection("users", ref => ref.where("userId", "==", userId))
.get()
.pipe(
filter(ref => !ref.empty),
map(ref => ref.docs[0].data() as User),
map(data => new User(data, data.location))
)
}
обновлено
если вам нужен экземпляр объекта, у вас должен быть дополнительный конструктор, подобный этому о назначении объекта
export class User {
constructor(
public id: string,
public name: string,
public contactNumber: number,
public isMechanic: boolean,
public email: string,
public password: string,
public address: string,
public imageUrl: string,
public location: PlaceLocation
) { }
public constructor(
init?: Partial<User>,
initLocation?: Partial<PlaceLocation>) {
Object.assign(this, init);
if(initLocation) {
this.location = new PlaceLocation(initLocation);
}
}
}
export class PlaceLocation {
constructor() { }
public constructor(init?: Partial<PlaceLocation>) {
Object.assign(this, init);
}
}
, поскольку вы читаете данные как объект без типа, вы можете только явно создать новый объект User и назначить ему свойства, используя данные из объекта
getUserByUserId(userId: string) {
return this.firestore
.collection("users", ref => ref.where("userId", "==", userId))
.get()
.pipe(
filter(ref => !ref.empty),
map(ref => ref.docs[0].data() as User),
map(data => new User(data, data.location))
)
}