无法使用typescript和ethereum访问web3对象

时间:2017-03-28 18:21:07

标签: angular typescript ethereum

我从零开始用angular 2和typescript开始了一个新项目:

ng new myProject

然后我用

安装了web3(用于以太坊)
npm install web3

在index.html的头部,我补充道:

<script src="node_modules/web3/dist/web3.min.js"></script>

此路径似乎没问题,因为我没有错误(如果我更改了一个char我有错误)。 在文档中: c.t.n.repl/print-and-return 我发现了这一点:直接从全局命名空间使用web3对象: 的console.log(WEB3); 但是web3没有定义。 我怎样才能得到这个对象? 注意:在后台我开始geth --testnet

3 个答案:

答案 0 :(得分:4)

您仍然需要先实例化它。使用JavaScript测试:

var web3 = new Web3();
window.console.log(web3);
> Object { _requestManager: Object, currentProvider: undefined, eth: 
    Object, db: Object, shh: Object, net: Object, personal: Object, bzz: 
    Object, settings: Object, version: Object, 2 more… }

我没有使用TypeScript的经验,但是你明白了。 web3js提供了库,您需要初始化它才能使用。它基本上是链接文档页面的第一行。

答案 1 :(得分:0)

我找到了一个解决方案,但是有一半的时间,转换器会在转换代码时抛出错误。 我所做的是将web3对象显式地放在窗口对象之外。

private getWeb3Provider(): Web3 {
if (typeof window.web3 !== 'undefined') {
  return new Web3(window.web3.currentProvider);
} else {
  this.web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
  return this.web3;
}}

在构造函数中:

constructor() {
    this.name = 'Web3 Service';
    console.log(`${this.name}: initialized...`);
    this.web3 = this.getWeb3Provider();
  }

答案 2 :(得分:0)

您可以从Window对象中获取对象:

var web3: any = window["web3"];
var Web3: any = window["Web3"];
var web3 = new Web3(web3.currentProvider);
this.contract = web3.eth.contract(this.contractAbi).at(this.contractAddress);