是否有可能在compilerOptions中有多个目标?

时间:2017-07-17 15:35:35

标签: javascript angular typescript

很抱歉,如果这是一个nobb问题,但我正在构建一个Angular应用程序,而我当前的tsconfig.json文件在'compilerOptions'中将'es6'作为'target':

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "types" : []
  },
  "exclude": [
    "node_modules"
  ]
}

是否可以拥有多个目标?例如,我可以添加es5吗?我问的只是因为我正在阅读为es5编写的教程,但由于我的项目的当前状态,我需要使用es6 - 即,我不能降级。我的所有代码都必须符合es6 - 如果两者都包括在内,我会想象我的代码可以符合es5和es6。

2 个答案:

答案 0 :(得分:7)

请记住,您还可以创建多个tsconfig文件,并使用extends功能创建一个覆盖大多数元素的基本tsconfig,然后创建两个覆盖目标的目标tsconfig。

基础tsconfig:

# uses dcast.data.table, much faster
library(data.table)
setDT(df)
dcast(df, store_id + year + event ~ item, fun.aggregate = sum, value.var='units') 

ES5 tsconfig:

{
    "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "types" : []
   },
   "exclude": [
     "node_modules"
   ]
}

ES6 tsconfig:

{
    "extends": "./base.json"
    "compilerOptions": {
        "target": "es5"
    }
}

然后你只需要运行你需要的任何目标:{ "extends": "./base.json" "compilerOptions": { "target": "es6" } }

这并不意味着您的代码会同时符合两者;但是,您可以选择向扩展基础的每个tsconfig添加tsc -p ./es6.json属性,并将输出编译为单独的目录。

答案 1 :(得分:2)

您只能为配置指定一个 targettarget的{​​{1}}属性接受单个字符串值。

指定compilerOptions作为目标将限制您在ES6或更高版本中编写源代码,它只是确保编译的代码与仅了解ES5或更低版本的客户端兼容。 lambda表达式等功能将被编译为函数表达式。

ES5这样的表达式会被编译为const foo = (bar) => bar.replace('\t', '');,目标设置为var foo = function (bar) { return bar.replace('\t', ''); };

如果您需要将目标编译为ES5或ES6,那将真正取决于您的应用程序将使用哪些设备/浏览器,就兼容性而言,ES5在此时肯定会是一个更“安全”的选择。这是确定ES6 browser comparability的好资源。

希望这有助于澄清事情!