Angular 4、Typescrypt Bitcoin Currency Exchange - 算术运算的右边必须是'any'、'number'或枚举类型

Angular 4, Typescrypt Bitcoin Currency Exchange - The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type

我试图在 Angular 4 中创建一个货币兑换应用程序,但是当我更改其中一个 属性 值时遇到问题。让我自己解释一下:

我有一项服务可以从 API 服务获取智利比索 (CLP) 的比特币价格,然后将价格存储在接口中。我想要做的是,当用户输入一定数量的 CLP 时,应用程序会自动将其转换为 BTC。 当我创建算法来执行此操作时,我使用 属性 和一个随机数来测试它。

Component.ts:

  exchangeRate : 715000;
  targetAmount = 1;
  baseAmount = this.exchangeRate;

  update(baseAmount) {
    this.targetAmount = parseFloat(baseAmount) / this.exchangeRate;
  }

这是 DOM:

<div class="form-group">
        <label for="company">Monto en CLP</label>
        <input type="number" class="form-control" id="company" placeholder="Ingrese el monto en CLP" (input)="update($event.target.value)">
</div>

这工作正常,但后来我添加了一些代码行以从 API 服务获取 exchangeRate。这是代码:

Component.ts

minask(price: SurbtcMarketView): number {
        return price.min_ask;
    }

Interface.ts

  export class SurbtcMarket {
  public ticker: SurbtcMarketView;
}

export class SurbtcMarketView {
  public last_price : number;
  public min_ask : number;
  public max_bid : number;
  public volume : number;
  public price_variation_24h : number;
  public price_variation_7d : number;
}

现在我想像这样在 exchangeRate 中使用 minask 而不是 715000:

exchangeRate : this.minask;
  targetAmount = 1;
  baseAmount = this.exchangeRate;

  update(baseAmount) {
    this.targetAmount = parseFloat(baseAmount) / this.exchangeRate;
  }

在/this.exchangeRate;我收到此错误:

The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type

我怎样才能避免这种情况?感谢您的帮助!

编辑:

这是我获取要在 this.exchangeRate 中使用的数据的服务:

service.ts

import { Injectable } from '@angular/core';
import { Http, Headers, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';
import {Observable} from "rxjs";
import 'rxjs/Rx';
import 'rxjs/add/operator/catch';
import { SurbtcMarket } from './surbtcmarket'


@Injectable()
export class SurbtcService {

  constructor(private http: Http) { }

  public getPricess() :Observable<SurbtcMarket> {
    return this.http.get('https://www.surbtc.com/api/v2/markets/btc-clp/ticker')
    .map((response: Response) => response.json());
  }

}

this.minask 引用方法,而不是原子值(例如数字)。这就是你收到错误的原因。将其转换为

this.minask($YOUR_ARGUMENT)

组件代码中的演示用法:

demoStockViewInstance = {
  last_price : 10;
  min_ask : 5;
  max_bid : 10;
  volume : 10;
  price_variation_24h : 10;
  price_variation_7d : 10;
}
// exchange should contain value 5 
exchangeRate = this.minask(this.demoStockViewInstance);
targetAmount = 1;
baseAmount = this.exchangeRate;

update(baseAmount) {
 this.targetAmount = parseFloat(baseAmount) / this.exchangeRate;
}

更新:

如果服务 returns 是可观察的,您应该在组件代码中的 subscribe 回调中执行计算:

this.surbtcService.getPricess().subscribe(response => {
  demoStockViewInstance = response.min_ask
})