Javascript 关于流错误wrt过滤器函数的混淆

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

在Javascript中,我编写了一个reducer代码,用于处理数组中字符串的添加和删除。此代码工作正常:

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。