VS2017中TypeScript2.5.3编译ES5时异步函数报错的解决咨询
解决TypeScript编译错误:Async函数在ES5/ES3中需要Promise构造函数
我来帮你搞定这个编译错误!这个问题的核心很明确:你在代码里用了async/await语法,但编译目标设成了ES5——而ES5标准里压根没有Promise这个构造函数,TypeScript需要拿到Promise的类型声明,或者确认有对应的运行时支持,才能顺利编译通过。
下面给你几个针对性的解决办法,你可以根据自己的情况选:
方法1:直接在VS2017项目属性里添加ES2015库支持
因为你没用到tsconfig.json,直接改项目设置最方便:
- 右键你的项目,选择属性
- 切换到TypeScript生成选项卡(如果看不到全部设置,点一下"显示所有设置")
- 找到Lib这个选项,在输入框里补充
ES2015.Promise(如果原来的内容是ES5,就改成ES5,ES2015.Promise,多个值用逗号分隔) - 保存设置后重新编译项目就行
这么做的好处是:既保留了ES5的编译目标,又给TypeScript提供了Promise的类型声明,完美匹配你的现有配置。
方法2:引入Promise的Polyfill(兼顾运行时支持)
如果你的代码要跑在不支持Promise的旧环境(比如IE11及更早版本),那光加类型声明还不够,得给运行环境补上Promise的实现:
- 先通过npm安装polyfill包:
npm install es6-promise --save - 然后在项目的入口文件(比如
index.ts)顶部加一句:import 'es6-promise/auto';
这样不管编译时的类型问题,运行时也能正常使用Promise了。
方法3:改用tsconfig.json配置(更灵活的长期方案)
要是你后续需要更精细的TypeScript配置,建议创建tsconfig.json文件,把配置写进去:
{ "compilerOptions": { "target": "es5", "module": "commonjs", "lib": ["es5", "es2015.promise"] } }
创建好之后,VS2017会自动识别这个文件,它的配置优先级会高于项目属性里的设置,后续改配置也更方便。
内容的提问来源于stack exchange,提问作者tesicg
相关产品推荐
相关产品推荐

