typescript - 将 Typescript 转译成 ES6 而不转译异步的最佳解决方案?
问题描述
抱歉,标题可能让您感到困惑,让我解释一下:
我们的 JS 环境有点特殊,完全支持 ES6,没有原生生成器function*
和yield
,所以 Typescript 代码:
async test(): Promise {
return await Promise.resolve();
}
将被转译成 ES6:
function test() {
return __awaiter(this, void 0, void 0, function* () { return yield Promise.resolve(); });
}
但是,讽刺的是......我们的环境不支持原生生成器......而且,我们也不能将 TS 转换为 ES5,因为 proj 引用的一些库是 ES6 模块,所以如果你将 TS 转换为 ES5,类不能被继承(ES5 使用 __extends 来做到这一点)
所以我正在寻找一种将我们的 TS 代码转换为 ES6 的解决方案,但其中的所有代码都async
转换为 ES5 风格(tslib.js
)
我可以接受任何解决方案,npm / node / post scripts / TS features 什么,我需要的是线索!多谢你们。
解决方案
感谢@ecraig12345 的提示。
实际上要实现这一点,您必须使用Babel
插件再次转译从 TS 源生成的 JS。
步骤:
1、正常从你的TS项目中编译输出JS文件。
2、用于npm
安装Babel及相关插件:
@babel/cli
@babel/core
@babel/runtime
@babel/plugin-transform-for-of
@babel/plugin-transform-regenerator
@babel/plugin-transform-runtime
3、编辑你的.babelrc
文件并使用这个内容:
{
"plugins": [
"@babel/plugin-transform-for-of",
"@babel/plugin-transform-regenerator",
"@babel/plugin-transform-runtime"
]
}
4、编辑你tasks.json
的TS项目:
{
....
"tasks": [
{
"label": "deployTs",
"group": "build",
"type": "shell",
"command": "tsc TS_OUTPUT_JS_FOLDER/ --module commonjs --target es6"
},
{
"label": "deployFinal",
"group": "build",
"type": "shell",
"command": "npx babel TS_OUTPUT_JS_FOLDER/ -d RE_TRANSPILE_OUTPUT_FOLDER/",
"dependsOn": ["depolyTs"],
"dependsOrder": "sequence"
},
....
]
....
}
5、然后只需deployFinal
通过菜单Terminal > Run Tasks执行任务,任务会先编译TS,然后运行Babel逐步转译async
输出文件夹中的语法。
玩得开心。
推荐阅读
- c++ - Minimalistically building a test for a simple header using CMake
- javascript - how to use filter method in array and print only specific value of the object
- android - How to create a system app for custom ROM
- java - Java applying filters on nested arrays?
- c - My recovered images don't match in CS50 PSET4 Recover
- database - 如何同步Redmine数据库pacemaker/pcs/corosync?
- excel - 基于其他单元格值的条件格式图标集
- python - 为什么我的 xml 输出文件没有格式化?
- reactjs - 带有 forwardRef 打字稿的 JSX 点表示法
- python - 用于向量余弦相似度的脚本查询在 Elasticsearch 中不起作用