有些函数根据输入数组的类型将作业委派给其他函数。如何指出特定的数组必须由特定的函数处理?
我一直在考虑并搜索了几个小时,但找不到解决方案。
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);
}
}
答案 0 :(得分:1)
无法根据数组中项目的类型进行优化。
这是因为array access is unsafe -总是有可能通过数组访问返回undefined
。可以使用数组以外的任何东西进行优化。
我已经重写了您的示例,将数组包装在对象中,并根据“ 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 :(得分:0)
您尝试过instanceof吗? 这是什么意思不起作用?您是否检查过输入[0] .name返回的类型?