重复标识符 'alpha'.deno-ts(2300) 意外的关键字或标识符

Duplicate identifier 'alpha'.deno-ts(2300) Unexpected keyword or identifier

我正在尝试在我的 Deno 应用程序中使用 Alpha Vantage NPM 包。我尝试使用它的 SkyPack 版本。但它给了我以下错误:

Duplicate identifier 'alpha'.deno-ts(2300)
Unexpected keyword or identifier.

这是我使用的代码:

import alphavantageTs from 'https://cdn.skypack.dev/alphavantage-ts';

export class StockTimeSeries{
        alpha = new alphavantageTs ("ASLDVIWXGEWFWNZG");

        alpha.stocks.intraday("msft").then((data: any) => {
            console.log(data);
            });
        
        alpha.stocks.batch(["msft", "aapl"]).then((data: any) => {
        console.log(data);
        });
    
        alpha.forex.rate("btc", "usd").then((data: any) => {
        console.log(data);
        });
    
        alpha.crypto.intraday("btc", "usd").then((data: any) => {
        console.log(data);
        });
    
        alpha.technicals.sma("msft", "daily", 60, "close").then((data: any) => {
        console.log(data);
        });
    
        alpha.sectors.performance().then((data: any) => {
        console.log(data);
        });
   

}

看起来 SkyPack 正在为该模块的 sub-dependencies 之一响应 401。我什至不确定它是否与 Deno 兼容。

也就是说,here's the repo source for the module, and here's the documentation 对应 API。看起来它只是一个简单的 REST API,它通过查询参数区分请求,因此您可以使用该模块作为模板来制作自己的 Deno 客户端,而无需花费太多精力。我会给你一些入门代码:

TS Playground

export type Params = NonNullable<ConstructorParameters<typeof URLSearchParams>[0]>;

class AlphaVantageNS { constructor (protected readonly api: AlaphaVantage) {} }

class Forex extends AlphaVantageNS {
  rate (from_currency: string, to_currency: string) {
    return this.api.query({
      function: 'CURRENCY_EXCHANGE_RATE',
      from_currency,
      to_currency,
    });
  }
}

export class AlaphaVantage {
  #token: string;

  constructor (token: string) {
    this.#token = token;
  }

  async query <Result = any>(params: Params): Promise<Result> {
    const url = new URL('https://www.alphavantage.co/query');

    const usp = new URLSearchParams(params);
    usp.set('apikey', this.#token);
    url.search = usp.toString();

    const request = new Request(url.href);
    const response = await fetch(request);

    if (!response.ok) throw new Error('Response not OK');

    return response.json();
  }

  forex = new Forex(this);
}


// Use:

const YOUR_API_KEY = 'demo';
const alpha = new AlaphaVantage(YOUR_API_KEY);
alpha.forex.rate('BTC', 'USD').then(data => console.log(data));