无法使用打字稿和以太坊访问 web3 对象
Cannot access web3 object with typescript and ethereum
我用 angular 2 和打字稿从头开始了一个新项目:
ng new myProject
然后我安装了 web3(用于以太坊)
npm install web3
在index.html的头部添加了:
<script src="node_modules/web3/dist/web3.min.js"></script>
这条路径似乎没问题,因为我没有错误(如果我更改一个字符,我就会出错)。
在文档中:
https://www.npmjs.com/package/web3
我发现了这个:直接从全局命名空间使用 web3 对象:
console.log(web3);
但是 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… }
虽然我没有使用 TypeScript 的经验,但你明白了。 web3js 正在提供库,您需要对其进行初始化才能使用。它基本上是链接文档页面的第一行。
我找到了一个解决方案,但有一半时间转译器会在转译代码时抛出错误。
我所做的是从 window 对象中显式获取 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();
}
您可以像这样从 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);
我用 angular 2 和打字稿从头开始了一个新项目:
ng new myProject
然后我安装了 web3(用于以太坊)
npm install web3
在index.html的头部添加了:
<script src="node_modules/web3/dist/web3.min.js"></script>
这条路径似乎没问题,因为我没有错误(如果我更改一个字符,我就会出错)。 在文档中: https://www.npmjs.com/package/web3 我发现了这个:直接从全局命名空间使用 web3 对象: console.log(web3); 但是 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… }
虽然我没有使用 TypeScript 的经验,但你明白了。 web3js 正在提供库,您需要对其进行初始化才能使用。它基本上是链接文档页面的第一行。
我找到了一个解决方案,但有一半时间转译器会在转译代码时抛出错误。 我所做的是从 window 对象中显式获取 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();
}
您可以像这样从 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);