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]的类型。名称返回?是的,它返回字符串。