Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何优化采用数组并集的函数中的类型?_Javascript_Arrays_Flowtype - Fatal编程技术网

Javascript 如何优化采用数组并集的函数中的类型?

Javascript 如何优化采用数组并集的函数中的类型?,javascript,arrays,flowtype,Javascript,Arrays,Flowtype,有些函数根据输入数组的类型将作业委托给其他函数。我如何指出特定数组必须由特定函数处理 我一直在考虑这个问题,搜索了几个小时,但找不到解决办法 type nameType = { name: string, } type surnameType = { surname: string }; type inputType = nameType[] | surnameType[]; function processSurnames(suranmes: surnameType[]) {

有些函数根据输入数组的类型将作业委托给其他函数。我如何指出特定数组必须由特定函数处理

我一直在考虑这个问题,搜索了几个小时,但找不到解决办法

type nameType = {
  name: string,
}

type surnameType = {
  surname: string
};

type inputType = nameType[] | surnameType[];

function processSurnames(suranmes: surnameType[]) {
  let result = {};
  // do something with surnames
  return result;
}

function processNames(names: nameType[]) {
  let result = {};
  // do something with names
  return result;
}

function process(input: inputType) {
  if (typeof input[0].name === 'string') { // <--- this refinement doesn't work
    return processNames(input);
  } else {
    return processSurnames(input);
  }
}
类型名称类型={
名称:string,
}
类型姓氏类型={
姓氏:string
};
类型inputType=nameType[]|姓氏类型[];
函数进程姓氏(suranmes:namestype[]){
让结果={};
//用姓氏做某事
返回结果;
}
函数processNames(名称:nameType[]){
让结果={};
//用名字做点什么
返回结果;
}
功能流程(输入:inputType){
如果(输入的类型[0].name=='string'){/您试过了吗?

这意味着什么不起作用?您是否检查了输入[0]的类型。name返回的是什么?

无法根据数组中项目的类型进行优化

这是因为——数组访问总是可以返回
未定义的
。可以使用数组以外的任何对象进行优化

我已经重写了您的示例,将数组包装在对象中,并基于“type”属性进行细化

// ...

type Names = { type: "names", list: nameType[] }
type Surnames = { type: "surnames", list: surnameType[] }

// ...

export function process(input: Names | Surnames) {
  if (input.type === "names") {
    return processNames(input.list)
  } else {
    return processSurnames(input.list)
  }
}

不幸的是:(

1.您尝试过instanceof吗?我没有原型可供比较,因为我使用api的响应。2.这意味着什么不起作用?这意味着流抛出一个错误:无法使用绑定到
名称的
输入调用
进程名称
,因为
名称类型
中缺少属性
姓氏
。3.是否已检查输入[0]的类型。名称返回?是的,它返回字符串。