Angular 无法使用typescript和以太坊访问web3对象

Angular 无法使用typescript和以太坊访问web3对象,angular,typescript,ethereum,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> 这个路径看起来不错,因为我没有错误,如果我更改一个字符,我就有一个错误。 在文件中: 我发现:直接从全局命名空间使用web3对象: con

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

ng new myProject
然后,我安装了用于以太坊的web3

npm install web3
在index.html的头部,我添加了:

<script src="node_modules/web3/dist/web3.min.js"></script>
这个路径看起来不错,因为我没有错误,如果我更改一个字符,我就有一个错误。 在文件中: 我发现:直接从全局命名空间使用web3对象: console.logweb3; 但是web3没有定义。 我怎样才能得到这个物体?
注意:在后台我启动了geth-testnet,您仍然需要首先实例化它。使用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… }

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

我找到了一个解决方案,但有一半的时间传输程序在传输代码时会抛出错误。 我所做的是将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();
  }

可以从窗口对象获取对象,如下所示:

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