Typescript 在lifecycle hook中订阅observable后,类变量未定义

Typescript 在lifecycle hook中订阅observable后,类变量未定义,typescript,angular,undefined,Typescript,Angular,Undefined,我尝试在我的组件类中设置一个变量(json对象)。Ngoniit订阅一个可观察的服务并设置组件变量。 当我试图在components模板中使用点符号访问此变量时,出现以下错误: 无法读取未定义的属性“count_runs” observable有一个类型注释(avgTime接口) 平均时间 export interface AvgTime { avg_runtime_millis: number; count_runs: number; } stats.service.ts impor

我尝试在我的组件类中设置一个变量(json对象)。Ngoniit订阅一个可观察的服务并设置组件变量。 当我试图在components模板中使用点符号访问此变量时,出现以下错误:

无法读取未定义的属性“count_runs”

observable有一个类型注释(avgTime接口)

平均时间

export interface AvgTime {
  avg_runtime_millis: number;
  count_runs: number;
}
stats.service.ts

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { AvgTime } from './avg-time';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class StatsService {
  constructor(private _http: Http) { }

  private _avgTimeUrl = 'http://localhost:3002/api/reservation/avgTime';

  getAvgTime() : Observable<AvgTime> {
    return this._http.get(this._avgTimeUrl)
               .map(res => res.json());
  }
}
从后端返回的my stats.service.ts为:

[{"AVG_RUNTIME_MILLIS":55,"COUNT_RUNS":5400}]

您需要利用Elvis运营商:

{{avgTime?.count_runs}}

由于avgTime是异步设置的,并且最初未定义…

您需要利用Elvis运算符:

{{avgTime?.count_runs}}

由于avgTime是异步设置的,并且一开始是未定义的…

这是可行的,但我试图理解这个问题。这是由可观察到的东西引起的,它们不必返回什么东西吗?我应该在界面中使用elvis运算符吗?承诺能解决这个问题吗?这是因为在你从可观察对象接收数据之前,
avgTime
不是未定义的(承诺也是如此)。Angular2尝试在加载组件时计算表达式,但此时未收到值。因此,当它试图获取
count\u runs
属性时,出现了一个错误。Elvis操作员阻止此操作。如果对象未定义,则不会抛出错误。因此,在这种情况下使用elvis运算符是最先进的?这是可行的,但我试图理解问题。这是由可观察到的东西引起的,它们不必返回什么东西吗?我应该在界面中使用elvis运算符吗?承诺能解决这个问题吗?这是因为在你从可观察对象接收数据之前,
avgTime
不是未定义的(承诺也是如此)。Angular2尝试在加载组件时计算表达式,但此时未收到值。因此,当它试图获取
count\u runs
属性时,出现了一个错误。Elvis操作员阻止此操作。如果对象未定义,则不会抛出错误。那么在这种情况下使用elvis运算符是最先进的吗?
{{avgTime?.count_runs}}