我试图让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)和其他选项,但似乎没有任何效果。
答案 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
}
},
]