typescript - Redux-saga:如何使用 typeScript 键入 worker 的参数
问题描述
有没有办法使用打字稿来设置工人传奇的参数类型?
我有这个界面
interface ITask{
id: number
task: string,
//other things here
}
我有这个听众和工人:
function* addTaskSaga():any {
yield takeEvery("TASK_ADD", workerAddTaskSaga);
}
function* workerAddTaskSaga({data}:any) {
//other things here
}
这段代码运行良好,但是我想强输入工人的参数,我的意思是:更改{data}:any
为data:ITask
但是,这会引发异常:
The last overload gave the following error.
Argument of type 'string' is not assignable to parameter of type 'TakeableChannel<unknown>'.ts(2769)
effects.d.ts(207, 17): The last overload is declared here.
有任何想法吗?
解决方案
如果问题仍然相关,这里就是答案。
您应该定义一些Action
从 redux 扩展的接口,然后将其作为类型参数传递给takeEvery
. 这将正确键入工作函数。
// This is Action interface which will hold type and payload.
interface TaskAction extends Action, ITask {type: "TASK_ADD" }
// Alternatively you may use
// interface TaskAction extends Action {type: "TASK_ADD", data: ITask }
interface ITask{
id: number
task: string,
//other things here
}
function* addTaskSaga():any {
yield takeEvery<TaskAction>("TASK_ADD", workerAddTaskSaga);
}
function* workerAddTaskSaga(data:TaskAction) {
// data is of type TaskAction
// data.id is number from ITask
// data.task is string from ITask
}
// Or if you've chosen second form of TaskAction
// function* workerAddTaskSaga({ data } : TaskAction) {
// data is of type ITask
// }
推荐阅读
- javascript - 如何在引导模式中检查 id 选择器是否有数据
- python - TypeError: *: 'Dimension' and 'float' in DenseNet using keras 不支持的操作数类型
- android - 如何强制显示 BottomAppBar - Xamarin Android
- java - 我想在 Eclipse 中使用 java 对 JBOSS 服务器上的多个文件进行 TAR
- javascript - JS | 如何以弧度表示旋转?
- macos - Xcode 12:如何链接为独立构建的目标文件
- android - 具有 ConstraintLayout.LayoutParams 的视图上的动画立即结束
- node.js - Sqlite3更新可变数量的值
- javascript - 当我使用 python 服务器时,视频进度条不起作用
- c - 这条鳕鱼收到一个包含日期的文件并打印出来。然后订购它们,但我收到一个奇怪的输出,我无法为 qsort 制作正确的功能