在'as'关键字

时间:2018-03-14 01:55:06

标签: reactjs typescript redux

我正在使用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将失败。

那些有才华的人可以为我揭开这一点吗? 提前感谢您的帮助!

0 个答案:

没有答案