在不转换异步的情况下将 Typescript 转换为 ES6 的最佳解决方案?

Best solution for transpiling Typescript into ES6 without transpiling of Async?

对不起,标题可能让您感到困惑,让我解释一下:

我们的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,因为项目引用的一些库是 ES6 模块,因此如果将 TS 转译为 ES5,则无法继承 class(ES5 使用 __extends 这样做)

所以我正在寻找一个将我们的 TS 代码转换成 ES6 的解决方案,但其中的所有 async 都被转换成 ES5 风格 (tslib.js)

我可以接受任何解决方案,npm / node / post scripts / TS 功能,我需要的是线索!谢谢大家。

感谢@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,然后通过菜单Terminal > 运行 Tasks执行deployFinal任务,任务会先编译TS再运行Babel转译async逐步输出文件夹中的语法。

玩得开心。