Angular 如何检查角度对象是否返回never类型?
我有一个使用Angular 7(Angular/core 7.2.1)构建的前端应用程序。 我正在用一些随机加载的HTML选择构建一个表单。当用户单击第一个选择选项时,此值用于填充第二个选择,依此类推 我开始工作,但应用程序不稳定。每次我用Angular 如何检查角度对象是否返回never类型?,angular,types,error-handling,Angular,Types,Error Handling,我有一个使用Angular 7(Angular/core 7.2.1)构建的前端应用程序。 我正在用一些随机加载的HTML选择构建一个表单。当用户单击第一个选择选项时,此值用于填充第二个选择,依此类推 我开始工作,但应用程序不稳定。每次我用ng serve重新加载它时,它都无法编译,出现一个错误“属性“name”不存在于类型“never””。此错误与所选选项的值有关。事实上,当应用程序启动时,没有选择的选项。我可以绕过这个问题,用字符串替换HTML选择对象,在加载应用程序后,我再次将其更改为ob
ng serve
重新加载它时,它都无法编译,出现一个错误“属性“name”不存在于类型“never”
”。此错误与所选选项的值有关。事实上,当应用程序启动时,没有选择的选项。我可以绕过这个问题,用字符串替换HTML选择对象,在加载应用程序后,我再次将其更改为object,从而编译应用程序。但是如果我停止angular服务器并重新启动它,错误就会返回
这些是我想要处理的选择。当用户单击systemsSelect选项时,一个方法将填充environmentsSelect。当用户单击environmentsSelect选项时,将填充podsSelect
系统:
{{system.name}
环境:
{{environment}}
豆荚:
{{pod}}
处理上述页面的组件如下所示:
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Component({
selector: 'app-systems-select',
templateUrl: './systems-select.component.html',
styleUrls: ['./systems-select.component.css']
})
@Injectable()
export class SystemsSelectComponent {
systemsSelect = new FormControl('');
environmentsSelect = new FormControl('');
podsSelect = new FormControl('');
selectedSystemOption: string;
selectedEnvironmentOption: string;
selectedPodOption: string;
systems = [];
environments = [];
pods = [];
constructor(private httpClient: HttpClient) {
this.loadSystems(undefined);
}
loadSystems(event: any) {
this.httpClient.get('http://localhost:8000/system').subscribe(systems => {
this.systems = systems as any;
}
);
}
loadEnvironmentsBySystem(event: any) {
var name = '';
if (typeof this.selectedSystemOption === 'object'){
name = this.selectedSystemOption.name;
} else {
name = this.selectedSystemOption;
}
this.httpClient.get('http://localhost:8000/environment/' + nome).subscribe(ambientes => {
this.environments = environments as any;
});
}
loadPods(event: any) {
var system = this.selectedSystemOption.name;
var environment = this.selectedEnvironmentOption;
this.httpClient.get('http://localhost:8000/pod/' + system + '-' + environment).subscribe(pods => {
this.pods = pods as any;
}
);
}
}
消息错误与组件的此部分有关:
if (typeof this.selectedSystemOption === 'object'){
name = this.selectedSystemOption.name;
} else {
name = this.selectedSystemOption;
}
当执行ng build
时,它在if中显示错误。我试着使用typeof来检查这个选项。selectedSystemOption
是“从不”,但它不起作用。我想有一种方法来检测这种类型的“从不”。当前行为是,当与“对象”进行比较时,类型为“从不”的this.selectedSystemOption
返回true。如果要避免它尝试读取属性名,是否可以添加其他条件
我希望变量名有一个字符串,如果没有选择任何选项或具有所选选项的值,则该字符串可以为空。您将
selectedSystemOption
声明为字符串。如果它应该是其他东西,更改声明。2.一个旁注,但是你在*ngFor=“let system of system”
中有一个打字错误。对不起@mbojko,我把以前的标识符翻译成了英语,忘记了“s”,但这部分是正确的,在原始源代码中正确的标识符是复数的。关于selectedSystemOption
,@mbojko,我试图将其更改为object
,而将错误更改为'Type'object'不能分配给Type'string'`