Gatsby + tsc不会转换休息运算符

时间:2017-11-24 21:40:27

标签: typescript gatsby

我试图让Gatsby按照here的说明使用TypeScript,但出于某种原因,tsc并没有透过其余部分(... )运算符,而不是抛出以下错误:

 WAIT  Compiling...

 ERROR  Failed to compile with 1 errors

 error  in ./src/components/Input.tsx

Syntax Error: Unexpected token (26:95)

> 26 | const Input = ({ text, ...inputProps }) => (react_1.default.createElement(
     |                        ^

如果我从命令行运行tsc,则会正确转换文件,并通过调用...替换__rest

这是我的tsconfig.json

{
  "compilerOptions": {
    "outDir": "./dist/"
  },
  "include": [
    "./src/**/*"
  ]
}

正如您所看到的,它非常小。我尝试过使用一堆lib(来自Compiler Options)和其他选项,但似乎没有任何效果。

1 个答案:

答案 0 :(得分:1)

您应该"target": "es5"添加tsconfig.json,因为Gatsby defaults to "target": "esnext"

{
  "compilerOptions": {
    "outDir": "./dist/",
    "target": "es5"
  },
  "include": [
    "./src/**/*"
  ]
}

它将指示TypeScript将ES6代码转换为ES5。

您尝试的lib选项只会更改TypeScript键入检查代码的方式。例如,使用"target": "es5"时,TypeScript将禁止使用Promise,因为它不是ES5标准的一部分。

通过添加"lib": ["dom", "es6"],您告诉他编译到ES5将使用ES6标准库+ DOM API(不属于ECMAScript,如document)。

使用Gatsby配置进行更新:

plugins: [
  {
    resolve: 'gatsby-plugin-typescript',
    options: {
      transpileOnly: true, // default
      compilerOptions: {
        target: 'es5',
        experimentalDecorators: true,
        jsx: `react`
      }, // default
    }
  },
]