jex*_*713 2 javascript typescript reactjs redux redux-saga
当我在 Typescript 中创建新的 Redux Store 时,我在添加属性时遇到问题:
const bindMiddleware = middleware => {
if (process.env.NODE_ENV !== 'production') {
const { composeWithDevTools } = require('redux-devtools-extension')
return composeWithDevTools(applyMiddleware(...middleware))
}
return applyMiddleware(...middleware)
}
function configureStore (initialState = exampleInitialState) {
const sagaMiddleware = createSagaMiddleware()
const store = createStore(
rootReducer,
initialState,
bindMiddleware([sagaMiddleware])
)
store.sagaTask = sagaMiddleware.run(rootSaga)
return store
}
export default configureStore
Run Code Online (Sandbox Code Playgroud)
并出现以下错误消息:
27:9 Property 'sagaTask' does not exist on type 'Store<{ error: any; count: number; lastUpdate: number; light: boolean; placeholderData: any; } | { lastUpdate: any; light: boolean; count: number; error: boolean; placeholderData: any; }, any>'.
25 | )
26 |
> 27 | store.sagaTask = sagaMiddleware.run(rootSaga)
| ^
28 |
29 | return store
30 | }
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
@types/
| - redux.d.ts
src/
| ...
| ... store.ts
Run Code Online (Sandbox Code Playgroud)
在redux.d.ts
import * as Redux from "redux"
declare module "redux" {
export interface Store {
sagaTask: ... // provide the types for `store.sagaTask` here
}
}
Run Code Online (Sandbox Code Playgroud)
在store.ts
const store = createStore(...)
store.sagaTask = ...
Run Code Online (Sandbox Code Playgroud)
这称为声明合并/模块扩充。
您还需要设置tsconfig.json从该目录读取类型@types。添加"typeRoots": [ "./@types", "./node_modules/@types" ]到此文件(注意:这些与您的 相关baseDir,因此请进行相应修改。
另请注意,您正在您的类型和您编写的代码之间创建一个契约。如果您未能正确设置中间件,sagaTask则会出现Required类型错误,但undefined实际上会出现这种情况。
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |