reactjs - Redux - 创建存储。类型参数不可分配给类型 'DeepPartial<any>' 的参数

标签 reactjs typescript redux

当我开始编译时,我总是会遇到堆栈错误。这表示我在 store 中的 initialState 已损坏或其他人。此外,如果我只是从 store 中切断 initialState prop,我的应用程序可以正常编译,但这不是一个好的解决方案。

我也承认它在 .js 文件版本的应用程序上正常工作。似乎 redux 在 TypeScript 方面存在一些问题。

错误:

TS2345: Argument of type '{ titleSwitch: string; }' is not assignable to parameter of type 'DeepPartial'. Property 'titleSwitch' is incompatible with index signature. Type 'string' is not assignable to type 'DeepPartial'.

我的部分代码:

import { createStore } from 'redux'
import reducer from './reducers'

const initialState = {
  titleSwitch: false
}

const store = () => {
  return createStore(
    reducer,
    initialState // TS Error
  )
}

测试于:

"redux": "^4.0.0",
"typescript": "^3.1.1",
"webpack": "^4.16.5"

最佳答案

如果代码在 JS 中运行但仅因为在 TypeScript 中输入而失败,我建议您使用“any”来忽略它:

const store = () =>
  createStore(
    reducer,
    initialState as any
  )

现在你要问我:但是为什么???如果您可以随时绕过问题,那么 TypeScript 有什么意义。

这样做的原因是,如果你是为了工作而这样做,你需要一直考虑与类型系统作斗争的值(value):

  • 要么它可以帮助您避免错误,使开发更容易,这就是严格类型化的真正动机
  • 要么它对你不利,阻止你在 JS 中做一些合法的事情,它不会使你的代码更健壮,因为有问题的代码是你从未真正接触过的东西(换句话说:如果使用正确的类型不会改变结果中的任何内容)

TypeScript 是用 flexibility in mind 发明的这在与 JS 库互操作时发挥了它的真正威力。只有从一开始就以这种方式设计的语言在任何地方都使用完美和严格的类型才有意义,而 JS 并非如此。

请不要误会我的意思。我很确定您的问题有解决方案。我的推理更多的是:你真的需要解决它吗?会不会给你的应用带来一些有用的东西?有时不值得。

关于reactjs - Redux - 创建存储。类型参数不可分配给类型 'DeepPartial<any>' 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686388/

相关文章:

reactjs - EmberJS 中的 Vuex/Redux 等价物是什么?

javascript - 我可以将 .getState() 方法作为 prop 传递给我的组件吗?

javascript - 将 React prop 传递到 axios.post 时如何绑定(bind) "this"

typescript - 从对象推断类型中的类型

javascript - EAI Content Enricher 的数据获取模式

typescript - 如何将 SockJS 添加到 Angular 2 项目中?

javascript - 当 Store 更改时,React Redux 不会重新渲染

javascript - 如何在 React 功能组件中限制 onWheel 事件

html - ReactTestUtils.renderIntoDocument 一个带有 child 的组件 - child 似乎是 "not render in DOM"

javascript - 使用 Antd 表列和列组的替代方法