Javascript 关于流错误wrt过滤器函数的混淆
在Javascript中,我编写了一个reducer代码,用于处理数组中字符串的添加和删除。此代码工作正常:Javascript 关于流错误wrt过滤器函数的混淆,javascript,flowtype,reducers,Javascript,Flowtype,Reducers,在Javascript中,我编写了一个reducer代码,用于处理数组中字符串的添加和删除。此代码工作正常: const taskId: string = action.payload; let taskIds: ?Array<string> = state.selectedTaskIds; if (!taskIds) { taskIds = [taskId]; } else if (taskIds.includes(taskId)) { if (taskIds.lengt
const taskId: string = action.payload;
let taskIds: ?Array<string> = state.selectedTaskIds;
if (!taskIds) {
taskIds = [taskId];
} else if (taskIds.includes(taskId)) {
if (taskIds.length === 1) {
taskIds = null;
} else {
const idx = taskIds.indexOf(taskId);
taskIds = [...taskIds.slice(0, idx), ...taskIds.slice(idx +1, taskIds.length)];
// DNW: taskIds = taskIds.filter((selTaskId: ?string) => selTaskId !== taskId);
}
} else {
taskIds.push(taskId);
}
const taskId:string=action.payload;
让taskIds:?Array=state.selectedTaskIds;
如果(!taskIds){
taskIds=[taskId];
}else if(taskIds.includes(taskId)){
如果(taskIds.length==1){
taskIds=null;
}否则{
const idx=taskIds.indexOf(taskId);
taskIds=[…taskIds.slice(0,idx),…taskIds.slice(idx+1,taskIds.length)];
//DNW:taskIds=taskIds.filter((selstaskid:?string)=>selstaskid!==taskId);
}
}否则{
taskIds.push(taskId);
}
不起作用的是前缀为“DNW”的注释行,它应该完成上面两行代码的功能。我得到的流错误消息是:
T
缺少类型批注T
是在中声明的类型参数
数组类型[1],并在方法调用时隐式实例化
过滤器
[2]。流量(错误)
我尝试过几种方法,但无法解决它,这就是为什么我使用另一种方法。但我最好奇的是,这个错误消息告诉了我什么,以及如何解决它。看看这里:有趣的阅读。除了
过滤器
似乎在流
方面有一些问题之外,我不太了解它。我很高兴我的“老派”方法奏效。你使用的是什么版本的流?您的代码似乎适用于v0.117.0。澄清一下,我不是说你需要升级。只需要知道您使用的是什么版本来帮助调试。通常,错误是指流无法确定数组的类型(即数组中的T
)。在您的情况下,Flow应该能够找到它,因为您已经注释了taskIds
。很高兴能帮助您找出为什么在您使用的流版本中它不能运行。如果您的流配置正常(如文档所述),您应该能够运行npm run Flow--version
(带空格)来获取您正在运行的流版本。看起来您运行的命令返回的是npm
的版本,而不是flow。