Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React Redux应用程序中的不变性-Immutablejs和类型脚本冲突_Reactjs_Typescript_Redux_Immutability_Immutable.js - Fatal编程技术网

Reactjs React Redux应用程序中的不变性-Immutablejs和类型脚本冲突

Reactjs React Redux应用程序中的不变性-Immutablejs和类型脚本冲突,reactjs,typescript,redux,immutability,immutable.js,Reactjs,Typescript,Redux,Immutability,Immutable.js,我们对Immutable.js与TypeScript的组合有一个问题,非常感谢您的意见: 在过去的一年里,我们正在开发react redux应用程序 正如在几乎所有最佳实践、常识和实践中所建议的那样,我们的存储数据是不变的 正如上面的redux文档中所建议的那样,正如在许多大型项目中所使用的那样,正如许多样板文件正在实现的那样,我们正在使用 我们也在中编写应用程序 问题是,这两个(Immutable.js和TypeScript)不能很好地发挥作用。一旦使用toJS或get或getIn将不可变对象

我们对
Immutable.js
TypeScript
的组合有一个问题,非常感谢您的意见:

在过去的一年里,我们正在开发react redux应用程序

正如在几乎所有最佳实践、常识和实践中所建议的那样,我们的存储数据是不变的

正如上面的redux文档中所建议的那样,正如在许多大型项目中所使用的那样,正如许多样板文件正在实现的那样,我们正在使用

我们也在中编写应用程序

问题是,这两个(
Immutable.js
TypeScript
)不能很好地发挥作用。一旦使用
toJS
get
getIn
将不可变对象转换为普通JS对象,类型将更改为
any
,这将破坏存储和组件之间的类型安全

我们试过了
  • 演员阵容:
  • state.users.getIn(['counts',visions])作为数字
    但我们希望有更好的类型安全性

  • Fix
    Immutable.js
    的键入:
  • 我们也试着自己打字,有时甚至打到

    interface ImmutableMap<T> {
     get<K extends keyof T>(name: K): T[K];
     set<S>(k: string, o: S): ImmutableMap<T & S>;
     getIn(searchKeyPath: any[], notSetValue?: any): T;
    }
    
    我们最终构建了另一个我们需要维护的
    Immutable.js
    库——需要支持的代码太多了

    关于记录选项

    我们希望避免使用
    record
    ——它会在终端浏览器中生成一大堆js代码,这是
    TypeScript
    所需要的,对用户来说是不必要的,维护起来非常困难,而且最终不会与纯js对象共享完整的相同API。我在过去的项目中使用过它,这是一次非常糟糕的经历

    问题 我的问题是针对那些创建/使用复杂React Redux应用程序的人:

  • 有人也有同样的问题吗?找到了一个很好的解决方案来使用
    Immutable.js
    TypeScript
  • 有人推荐了更好的库/解决方案,以实现良好的不变性和类型安全性吗
  • 要更新:


    最终,在一些基准测试和facebook小组讨论之后,我们转向了
    immer
    ,我们不想回头看。伟大的解决方案类型,简单,对象是本地的,所以不需要学习新的api。。。我们很高兴。

    我同意Immutable.js不能很好地使用TypeScript。我个人使用你的选项3(“香草”),但有时确实有点混乱。我尽量不把我的州埋得太深,尽管如此,在大多数情况下,它运作良好。您可能尝试的一个可能的库是我还没有用过的,但它特别适合打印稿(包含在库中的定义)。
    {
        ...state,
        profiles: {
          ...state.profiles,
          [id]: {
            ...state.profiles[id],
            meta: {
              ...state.profiles[id].meta,
              [sub]: payload,
            },
          },
        },