【问题标题】:What is target in tsconfig.json for?tsconfig.json 中的目标是什么?
【发布时间】:2017-07-13 22:41:52
【问题描述】:

tsconfig.json 中的target 是什么意思?

{
  "compilerOptions": 
  {
    "sourceMap": true,
    "target": "es5",
    "module": "commonjs",
    "jsx": "react",
    "moduleResolution": "classic",
    "lib": [ "es2015", "dom",  "es2017" ]
  }
}

【问题讨论】:

    标签: typescript tsconfig transpiler


    【解决方案1】:

    我对 Typescript 很陌生。 tsconfig.json 中的 Target 是什么意思?

    target 表示应该从给定的 TypeScript 发出哪个 JavaScript 目标。例子:

    target:es5

    ()=>null 将变为 function(){return null},因为 ES5 没有箭头函数。

    target:es6

    ()=>null 将变为 ()=>null,因为 ES6 具有箭头功能。

    更多

    我还发了一个快速video on the subject?。

    【讨论】:

    • 如果我以 es5 为目标,我还需要 babel,而且我的打字稿代码包含异步和等待,如果我将目标指定为 es5,那会编译吗?
    • 不需要 babel ?
    • 我使用的是es5,但它将解构[...arr].map 解释为arr.slice().map,这对于没有slice 的类数组对象会中断。当我以 es6 为目标时,它开始在我的浏览器中运行,但它适用于所有人吗?
    • @Qwerty 不,它不会。例如,它在 Internet Explorer 11 中不起作用,因为它不支持 es6 并且没有 .map 功能。即使您以 es5 为目标,它仍然无法在 Internet Explorer 中运行,因为添加 polyfill 不是转译器的工作。如果你想支持非 es6 浏览器,你仍然需要添加一个 polyfill。
    • @Qwerty 好吧,我的意思是 Typescript 转译不会为您填充缺失的方法,它只处理语法。这个线程解释得很好:github.com/frankwallis/plugin-typescript/issues/166
    【解决方案2】:

    如果您的目标是 es2017 ,那是最新版本,其中包含对共享内存和字符串的新库引用。改变你的目标意味着改变你的代码编译的库。如果您想在支持高版本引用的库的同时保持目标低版本,您可以将所需的库添加到tsconfig.json中的"lib"

    要了解更多不同版本中引用的库,请参阅this 答案。

    【讨论】:

      【解决方案3】:

      Target 更改您正在编译的 JavaScript 版本。

      https://www.typescriptlang.org/docs/handbook/compiler-options.html 提供这些选项

      本着试图更好地理解目标标志如何改变我的代码的精神,我为每个不同的版本编译了一些测试代码,以便更好地理解差异。

      https://github.com/aizatto/typescript-playground/tree/master/dist/test-async-main

      我还会根据我所查看的环境记录我应该定位的目标

      https://www.aizatto.com/notes/typescript

      【讨论】:

        猜你喜欢
        • 2016-09-21
        • 2021-12-14
        • 2020-02-06
        • 1970-01-01
        • 2020-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        相关资源
        最近更新 更多