Gatsby + tsc 不转换 rest 运算符

Gatsby + tsc doesn't transpile rest operator

我正在按照说明 here 尝试让 Gatsby 使用 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/**/*"
  ]
}

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

您应该将 "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
    }
  },
]