我正在使用Redux v4和Typescript v2.7创建React v16应用程序。我有一个奇怪的问题,ts-node,我用来运行我的测试,表现出与awesome-typescript-loader不同的行为,我用它来构建和运行我的项目。
它专门针对as
关键字的特定实例。由于我正在使用当前驻留在a pull request中的redux-thunk版本以允许redux-thunk支持带有Typescript的Redux v4,因此这更复杂。
在
上运行ts-node scirpt.ts
script.ts:
require("babel-register")({
extensions: ['.ts', '.tsx'],
})
require('configureStore')
configureStore.ts:
import { createStore, applyMiddleware } from 'redux'
import thunk, { ThunkAction, ThunkMiddleware } from 'redux-thunk'
type MyState = {foo: number}
type MyAction = {type: "foo"}
function myReducer(state: MyState, action: MyAction) {
return state
}
function configureStore(state: MyState) {
const store = createStore(
myReducer,
applyMiddleware(thunk as ThunkMiddleware<MyState, MyAction>),
)
return store
}
生成以下错误:
SyntaxError: configureStore.ts: Unexpected token, expected , (14:26)
12 | const store = createStore(
13 | myReducer,
> 14 | applyMiddleware(thunk as ThunkMiddleware<MyState, MyAction>),
| ^
15 | )
16 | return store
17 | }
at Parser.pp$5.raise (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:4454:13)
at Parser.pp.unexpected (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:1761:8)
at Parser.pp.expect (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:1749:33)
at Parser.pp$3.parseCallExpressionArguments (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:3564:12)
at Parser.pp$3.parseSubscripts (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:3533:31)
at Parser.pp$3.parseExprSubscripts (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:3504:15)
at Parser.pp$3.parseMaybeUnary (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:3474:19)
at Parser.pp$3.parseExprOps (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:3404:19)
at Parser.pp$3.parseMaybeConditional (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:3381:19)
at Parser.pp$3.parseMaybeAssign (C:\dev\js-starter-kit\node_modules\babylon\lib\index.js:3344:19)
这是语法错误这一事实让我感到困惑。这让我觉得ts-node有些问题?因为使用webpack和awesome-typescript-loader完全相同的代码运行良好。
另外,如果你把所有这些代码都放在同一个文件中,而不是require
另一个,那么问题就不会发生!! 这没有任何意义对我来说。
ts-node --version
返回以下内容:
ts-node v5.0.1
node v6.10.3
typescript v2.7.2
此处描述的问题尽可能减少,但如果它有用,我已经在我正在处理问题的项目上发布了testsFail
分支here起源于。要查看它,请克隆项目,检查testsFail
分支,然后运行npm install
。然后将node_modules/redux-thunk/index.d.ts
替换为上述拉取请求中的this one。最后运行npm test
以查看错误。如果您转到上一次提交,测试将通过,但npm start
将失败。
那些有才华的人可以为我揭开这一点吗? 提前感谢您的帮助!