I have a method that is called from two places where the argument type is known. In this method, the incoming argument is checked for both types yet both return false. I don't understand why this is happening. I've read the question someone else posted who had the same issue. But my problem is different because I am not constructing a plain object like he is. The question can be found here:
TypeScript instanceof not working
Here is the method that causes the problem:
changeUnitOfValueInput(filter){
console.log((filter === undefined));
let filterType: string;
if (filter instanceof HTMLInputElement)
filterType = (filter as HTMLInputElement).value;
else if (filter instanceof AdvancedFilter){
console.log("its in");
filterType = (filter as AdvancedFilter).advancedFilterSubject;
}
else{
console.log('im out');
return;
}
switch(filterType){
case AdvancedFilterSubject.GROWTH_TEMPERATURE:{
this.unitLabel = (this.filterOptionsForm.controls['measureSystem'].value ==='imperial') ? '°F' : '°C';
break;
}
case AdvancedFilterSubject.GROWTH_DAYS:{
this.unitLabel = 'days'
break;
}
//fall through
case AdvancedFilterSubject.PLANT_HEIGHT:
case AdvancedFilterSubject.PLANT_SPACING:
case AdvancedFilterSubject.ROW_SPACING:
case AdvancedFilterSubject.SOW_DEPTH:
this.unitLabel = (this.filterOptionsForm.controls['measureSystem'].value ==='imperial') ? '″' : '㎝';
}
}
This method is called in this component method:
populateFieldsWithSelectedFilterData(existingAdvancedFilter: AdvancedFilter){
this.changeUnitOfValueInput(existingAdvancedFilter);
this.filterOptionsForm.controls['filterType'].setValue(existingAdvancedFilter.advancedFilterSubject);
this.filterOptionsForm.controls['logicalOperator'].setValue(existingAdvancedFilter.logicalOperator);
this.filterOptionsForm.controls['advancedFilterValue'].setValue(existingAdvancedFilter.filterValue);
}
The second place where it gets called is in the frontend (html part):
<p-dropdown #filterType formControlName = "filterType" placeholder="Filter type" [options]="filterTypesList" (onChange)="changeUnitOfValueInput(filterType)" >
</p-dropdown>
The method keeps returning prematurely because both instanceof conditions return false. Can anyone tell me what is going on?
EDIT: Heres the definition of filterTypeList that is used in the HTML
filterTypesList: SelectItem[] = [
{label:'Minimum temperature', value: AdvancedFilterSubject.GROWTH_TEMPERATURE},
{label:'Growth days', value: AdvancedFilterSubject.GROWTH_DAYS},
{label:'Maximum height', value: AdvancedFilterSubject.PLANT_HEIGHT},
{label:'Row spacing', value: AdvancedFilterSubject.ROW_SPACING},
{label:'Plant spacing', value: AdvancedFilterSubject.PLANT_SPACING},
{label:'Sow depth', value: AdvancedFilterSubject.SOW_DEPTH}
];