我希望select效果返回我的状态类型。我正在使用模块扩展来实现这一点
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
}问题是,当我试图选择自己的状态时,状态没有按预期输入。
const users = yield select((state) => (state.users));在这里,用户有any类型


我应该如何正确地键入这一效果?
发布于 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
所以现在唯一的解决办法是:
const value: Stuff = yield select(getStuff);(当然,在这些情况下,您可以忽略类型)
发布于 2021-11-19 16:00:37
由于state是很好的类型(它的类型是IReduxState),而且在state.users下有一个编译器错误,所以问题是IReduxState接口没有users属性。
https://stackoverflow.com/questions/69381713
复制相似问题