@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));


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

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

Войти через центр авторизации
Похожие вопросы