gpt4 book ai didi

javascript - 如何在 TypeScript 中实现静态类型的不可变 redux 状态树?

转载 作者:行者123 更新时间:2023-12-03 04:54:44 24 4
gpt4 key购买 nike

使用 TypeScript + Redux 并能够定义静态类型的不可变状态树,如下所示:

interface StateTree {
readonly subState1: SubState1;
readonly subState2: SubState2;
}

interface SubState1 {
readonly a: number;
readonly b: string;
}

interface SubState2 {
readonly c: {
readonly d: symbol;
readonly e: string;
};
}

...太棒了,因为它很大程度上避免了对诸如 ImmutableJS 之类的库的需要。并允许对访问只读状态树提供强有力的保证,如下所示:

const state: StateTree = getState();
state.subState2.c.e

但是,在创建只读状态树的修改副本时,有没有办法保持不变性和类型安全?

我认为 Object.assign() 可以胜任这项任务(这是从不变性的 Angular 来看),但由于 TypeScript 的类型,它失去了编译时类型安全性交叉行为(see this)。

最佳答案

当我第一次建立我的项目时,我犯了 React 和 Redux 菜鸟错误,没有对不变性给予足够的重视,现在我开始考虑对其进行改造。呃。我一直在评估不同的方法,非常重视保留 TypeScript 的强类型。我没有深入研究 Immutable.js,因为我没有看到用它保留类型检查的方法,至少在我的项目中没有。然后我偶然发现了 ImmutableAssign

https://github.com/engineforce/ImmutableAssign

ImmutableAssign 的既定设计目标之一是与 TypeScript 很好地配合,到目前为止,这对我来说似乎效果很好。它的行为似乎也正是我所希望的,在深度嵌套的对象链上更改属性会更改路径中所有对象的引用。不幸的是,我在项目改造方面还没有走得足够远,无法真正评论 ImmutableAssign 的性能特征。不过,您可能想看一下。

关于javascript - 如何在 TypeScript 中实现静态类型的不可变 redux 状态树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42480605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com