为什么boolean在firestore查询(typescript)中为true



我使用AngularFire在Angular 8中查询Firestore。当我查询字符串(例如下面代码中的module_version(时,它可以工作,但尝试在Firestore中查询布尔字段对下面的代码不起作用。我只能使用active==true获取所有对象,但不能使用false。当我将布尔变量active悬停在查询中(在VSCode中(时,它会显示"var active:true",而不是我预期的"var active:boolean"。我想这就是问题所在,因为我可以查询true,但不能查询false。将字符串变量module_version悬停在上面会得到"var module_version:string"。(我在Javascript中读过关于真/假问题的答案,但没有从中得到任何答案。(

为什么我的变量似乎自动设置为true,我该怎么办?

constructor(afs: AngularFirestore) {
this.activeFilter$ = new BehaviorSubject(null);
this.module_versionFilter$ = new BehaviorSubject(null);
this.modules$ = combineLatest(
this.activeFilter$,
this.module_versionFilter$
).pipe(
switchMap(([active, module_version]) => 
afs.collection<Module>('Modules', ref => {
let query : firebase.firestore.CollectionReference | firebase.firestore.Query = ref;
if (active) { query = query.where('active', '==', active) };
if (module_version) { query = query.where('module_version', '==', module_version) };
return query;
}).valueChanges()
)
);
}

感谢您在评论线程中的澄清。如前所述,您的问题是:

if (active)

只有当active本身为真时才会为真。因此,只有当active为true时才添加查询。

你想要更像的东西

if (typeof(active) !== 'undefined' && active !== null)

最新更新