@zlodiak

Почему свойство не существует в объекте?

Я написал пример уровня helloWorld, который получает курс валют, но пример не запускается. В консоль выводится такое сообщение об ошибке:
ERROR in src/app/components/exchange-rates/exchange-rates.component.ts(33,73): error TS2339: Property 'rates' does not exist on type '{}'.


Вот код компонента:
import { Component, OnInit } from '@angular/core';
import { Apollo } from 'apollo-angular';
import gql from 'graphql-tag';
import { Observable } from 'rxjs';
import { shareReplay, map } from 'rxjs/operators';


@Component({
  selector: 'app-exchange-rates',
  templateUrl: './exchange-rates.component.html',
  styleUrls: ['./exchange-rates.component.scss']
})
export class ExchangeRatesComponent implements OnInit {

  rates$: Observable<any[]>;
  loading$: Observable<boolean>;
  errors$: Observable<any>;

  constructor(private apollo: Apollo) { }

  ngOnInit() {
    const source$ = this.apollo.query({
      query: gql`
        {
          rates(currency: "USD") {
            currency
            rate
          }
        }
      `
    }).pipe(shareReplay(1));

    this.rates$ = source$.pipe(map(result => result.data && result.data.rates));
    this.loading$ = source$.pipe(map(result => result.loading));
    this.errors$ = source$.pipe(map(result => result.errors));
  }

}


Проблема в том, что в официальной документации appolo есть ссылка на работающий пример. И мой код полностью повторяет этот пример(даже package.json совпадает)

Помогите пожалуйста понять как мне исправить мой скрипт и вообще в чём суть ошибки.

Я пробовал помещать в setTimeout блок:
this.rates$ = source$.pipe(map(result => result.data && result.data.rates));
    this.loading$ = source$.pipe(map(result => result.loading));
    this.errors$ = source$.pipe(map(result => result.errors));


но не помогло.
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
result.data['rates']
А вообще надо как бы типы описывать. Ts считает что result.data у вас это пустой объект.
setTimeout тут не причем, это ошибка компиляции typescript.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы