首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux-saga模块增强选择效果

Redux-saga模块增强选择效果
EN

Stack Overflow用户
提问于 2021-09-29 18:32:13
回答 2查看 798关注 0票数 0

我希望select效果返回我的状态类型。我正在使用模块扩展来实现这一点

代码语言:javascript
复制
import { SelectEffect, Tail } from 'redux-saga/effects';

import { IReduxState } from 'reducers/rootReducer';

declare module 'redux-saga/effects' {
    export function select<Fn extends (state: IReduxState, ...args: any[]) => any>(
        selector: Fn,
        ...args: Tail<Parameters<Fn>>
    ): SelectEffect
}

问题是,当我试图选择自己的状态时,状态没有按预期输入。

代码语言:javascript
复制
const users = yield select((state) => (state.users));

在这里,用户any类型

我应该如何正确地键入这一效果?

EN

回答 2

Stack Overflow用户

发布于 2021-11-19 17:49:19

问题是,类型记录仍然不支持基于已生成表达式的注入值的映射/类型推断。

在2015年,围绕这一点进行了一些讨论:https://github.com/Microsoft/TypeScript/issues/2983 https://github.com/microsoft/TypeScript/issues/2873

然而,结果只提供更好的支持普通迭代器和返回类型(而不是像redux这样的异步运行程序),而且此后再也没有做过任何其他事情。请注意,redux-saga 这里中利用了更好的返回类型支持,尽管这对您的情况没有帮助。

在saga回购本身中有一些转盘,它发现您实际上可以使用一个使用yield*语法的黑客解决方案来解决这个问题。实际上,有人把这个解决方案添加到了redux传奇的上面:https://github.com/agiledigital/typed-redux-saga

虽然在使用all效果时存在多种不同类型的问题,但在大多数情况下,它似乎都是有效的。

在redux-saga中甚至有一个PR来支持redux-saga本身的同样事情,但它没有向前推进,因为redux-saga的维护者忙于其他事情:

https://github.com/redux-saga/redux-saga/pull/2053

所以现在唯一的解决办法是:

  • ( a)继续使用redux-saga,并为从收益率表达式中向其分配注入内容的变量添加显式类型:
代码语言:javascript
复制
const value: Stuff = yield select(getStuff);
  • ( b)使用类型化-还原-佐贺

(当然,在这些情况下,您可以忽略类型)

票数 2
EN

Stack Overflow用户

发布于 2021-11-19 16:00:37

由于state是很好的类型(它的类型是IReduxState),而且在state.users下有一个编译器错误,所以问题是IReduxState接口没有users属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69381713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档