我安装
npm install -g typescript
然后我想编译我的main.ts类,但是我总是遇到此错误
main.ts:14:2 - error TS2705: An async function or method in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.
我的代码:
import { OrderWatcher, OnOrderStateChangeCallback, OrderWatcherConfig } from '@0xproject/order-watcher';
import { SignerSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0xproject/subproviders';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
let url = 'https://mainnet.infura.io/xxx';
//let url = 'http://localhost:8545';
let provider = new RPCSubprovider(url);
const providerEngine = new Web3ProviderEngine();
providerEngine.addProvider(provider);
providerEngine.start();
let orderWatcher = null;
(async () => {
// Get all of the accounts through the Web3Wrapper
const web3Wrapper = new Web3Wrapper(providerEngine);
const blockNumber = await web3Wrapper.getBlockNumberAsync();
const networkId = await web3Wrapper.getNetworkIdAsync();
console.log(blockNumber);
console.log(networkId);
//let networkId = 1;
//let partialConfig = new Partial<OrderWatcherConfig>();
orderWatcher = new OrderWatcher(
web3Wrapper.getProvider(),
networkId
);
// orderWatcher.subscribe(
// ( error: Error|null, orderState?: OrderState ) : void => {
// console.log('callback');
// console.log(error);
// console.log(orderState);
// }
// );
orderWatcher.subscribe(
( callback: OnOrderStateChangeCallback ) : void => {
console.log('callback');
//console.log(callback);
}
);
console.log('end');
})();
console.log('end 2');
我有2个问题?
无法将未定义或null转换为对象
编辑
我的tsconfig.json
{
"compilerOptions": {
"lib": [ "dom","es2015" ]
},
"files": [
"main.ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
答案 0 :(得分:1)
问题1:如何解决此问题取决于JavaScript代码将在其中运行的环境。您可以使用target
中的tsconfig.json
编译器选项(或在命令行中使用--target
)来指定运行时环境支持的最新JavaScript功能级别,然后TypeScript会尽力而为将任何使用target
级别不支持的功能的代码转换为将与target
级别一起使用的等效代码。
异步功能是ES2017功能,因此,如果目标环境支持您计划使用的所有ES2017功能(请参阅this chart),则只需将target
设置为es2017
,然后TypeScript将传递异步功能。否则,TypeScript需要将异步函数转换为使用promise的函数,因此如果它认为您的目标环境可能不支持promise,则会发出警告。如果您的target
是es6
(与es2015
相同)或更高版本,则可以保证对诺言的支持。如果您的目标不支持全部es6
但支持承诺,则可以将es2015.promise
添加到lib
选项中以告知TypeScript支持承诺。否则,您必须提供自己的Promise库。
问题2:要解决此问题,对于初学者,我需要查看错误的堆栈跟踪。