2017-12-27 185 views
1

我試圖做一個打字稿接口,爲cryptocompare coinlist API創建界面(https://www.cryptocompare.com/api/data/coinlist/typescipt:爲cryptocompare coinlist API

我已經嘗試過目前這樣的:

interface CoinListResponse { 
    Response: string, 
    Message: string, 
    BaseImageUrl: string, 
    BaseLinkUrl: string, 
    Type: number, 
    Data: Array<Coin> 
} 

現在,這部分作品但Data: Array<Coin>存在問題,因爲Data不是數組而是對象。你可以在這裏看到documenation:https://www.cryptocompare.com/api/#-api-data-coinlist-

這是我想解決什麼: example code

這是硬幣接口:

export interface Coin { 
    Id: number, 
    Url: string, 
    Name: string, 
    CoinName: string, 
    FullName: string, 
    Algorithm: string, 
    ProofType: string, 
    SortOrder: number 
} 

這可能嗎?

非常感謝。

+0

但..數據是否有你正在返回'可觀察'因爲你是有原因的不處理數組? –

+0

@SurajRao我想用作數組 – DazDylz

回答

0

根據API JSON響應定義:

"Data": { 
     "LTC": { 
      "Id": "3808", 
      "Url": "/coins/ltc/overview", 
      "ImageUrl": "/media/19782/ltc.png", 
      "Name": "LTC", 
      "CoinName": "Litecoin", 
      "FullName": "Litecoin (LTC)", 
      "Algorithm": "Scrypt", 
      "ProofType": "PoW", 
      "SortOrder": "2" 
     } 
     ... 
    }, 

Data屬性可以被建模爲一個鍵 - 值對類型,其中關鍵是貨幣名稱(string),值是​​類型的。

export interface CoinData { 
    [key: string]: Coin 
}; 

interface CoinListResponse { 
    Response: string, 
    Message: string, 
    BaseImageUrl: string, 
    BaseLinkUrl: string, 
    Type: number, 
    Data: CoinData 
} 
+0

嗯。這是更近一步,但現在我得到'[ts]運算符'<='不能應用於類型'硬幣'和'數字'。' – DazDylz

+0

這是因爲你必須通過名稱訪問特定的貨幣:'coin ['LTC' ] .SortOrder'。否則,你正在訪問整個哈希集,其中包含多種貨幣及其數據。 –

+0

謝謝。我希望它是可迭代的。請參閱下面的我的回答。 – DazDylz

0

解決方案不必須中將sortOrder either.I認爲這將是內部data.And另一個對象[ts] Operator '<=' cannot be applied to types 'Coin' and 'number'.

export function coins$(): Observable<any> { 
    const response = WebRequest.json<CoinListResponse>(`${API_BASE}/data/all/coinlist`); 
    return Observable.fromPromise(response) 
     .map(response => response.Data) 
     .map(coins => Object.values(coins).filter(coin => coin.SortOrder <= COIN_LIMIT)); 
};