Angular 如何检查角度对象是否返回never类型?

Angular 如何检查角度对象是否返回never类型?,angular,types,error-handling,Angular,Types,Error Handling,我有一个使用Angular 7(Angular/core 7.2.1)构建的前端应用程序。 我正在用一些随机加载的HTML选择构建一个表单。当用户单击第一个选择选项时,此值用于填充第二个选择,依此类推 我开始工作,但应用程序不稳定。每次我用ng serve重新加载它时,它都无法编译,出现一个错误“属性“name”不存在于类型“never””。此错误与所选选项的值有关。事实上,当应用程序启动时,没有选择的选项。我可以绕过这个问题,用字符串替换HTML选择对象,在加载应用程序后,我再次将其更改为ob

我有一个使用Angular 7(Angular/core 7.2.1)构建的前端应用程序。 我正在用一些随机加载的HTML选择构建一个表单。当用户单击第一个选择选项时,此值用于填充第二个选择,依此类推

我开始工作,但应用程序不稳定。每次我用
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'`