我的项目中有一个假想的Typescript文件(简化示例)。

Utils.ts:

import * as HelperFromNodeModules from 'helper-from-node-modules';

class Utils {
  static foo() {
    return HelperFromNodeModules.parse(...);
  }
}

导入helper-from-node-modules包含一个Javascript文件。

helper-from-node-modules.js:
const dep = require('foo');
function parse(...) {
   return bar.map((e) => {...});
}

并且从@types/helper-from-node-modules index.d.ts中:
export function parse(...);
tsconfig.json包含以下内容:
{
  ...
  "target": "es5",
  "lib": ["es2015.collection","es6", "dom"],
  "sourceMap": true,
  "allowJs": true,
  ...
}

所以我的问题是Typescript编译器的输出文件是我的已编译源代码加上所有格式的巨大串联。由于helper-from-node-modules始终是.js文件,因此编译器似乎只是将其内容附加到输出文件中。因此,尽管"target": "es5"仍在输出文件中,但仍包含es6 Artifact (如const(e) => {...}),从而导致以后出现错误,这些错误要求严格使用es5 javascript。

有没有办法告诉Typescript编译器/编译器在javascript依赖项上也输出es5?

如果需要,可使用的上下文:

我犯了一个可怕的错误,将react-create-app-typescriptreact-scripts-ts用作我的React应用程序的样板。内置的webpack堆栈对源代码应该来自哪里以及是否已编译的源必须必须为es5持谨慎态度。如果尝试最小化任何es6 Artifact ,打包的minifier / uglifier将崩溃。我知道我可以运行npm run-script eject并修改各种配置脚本,但是我正努力避免这种困惑。我希望仅将其源代码编译为es6,而不会将其webpack堆栈弄乱。

最佳答案

不幸的是,没有办法将依赖关系从ES6转换为ES5。 tsconfig.json中的该选项仅影响如何转换TypeScript代码。您应该做的是使用helper-from-node-modules的ES5版本。例如,Angular随ES5(umd),ES5,ES6一起分发了多个软件包。然后,在库的package.json中,有一些选项可以告诉打包程序(通常是webpack)使用哪个版本,具体取决于目标用于TypeScript。

如果您使用的库不支持该库,那么您唯一的选择就是自己将其转换为ES5,或者使用babel或使用其他方法。
但是,对于一个仅作为ES6分发的库来说,这是很奇怪的。

关于javascript - typescript 转译es6 .js对es5的依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50090972/

10-12 00:09