Angular 4,Typescrypt比特币货币兑换 - 算术运算的右侧必须是'any','number'或枚举类型

时间:2017-06-27 20:35:56

标签: angular typescript bitcoin

我试图在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;
  }

in / this.exchangeRate;我收到这个错误:

  

算术运算的右侧必须是'any'类型,   'number'或枚举类型

我该如何避免这种情况?谢谢你的帮助!

编辑:

这是我在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());
  }

}

1 个答案:

答案 0 :(得分:1)

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;
}

<强>更新

如果服务返回一个observable,您应该在组件代码中的subscribe回调中执行计算:

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