当我试图推断一个对象不是空的时,我遇到了一个问题.
GIVEN个
我有这个函数getAllListLabels和定制的isEmpty判断函数.
export function getAllListLabels(list: Array<Labels> | undefined) {
if (isEmpty(list)) {
return null;
}
return list.map((value) => value.label).join(", ");
}
export function isEmpty<T>(obj: T) {
if (!obj) {
return true;
}
if (Array.isArray(obj)) {
return isNonEmptyArray(obj);
}
return Object.getOwnPropertyNames(obj).length === 0;
}
Problems
使用这个isEmpty函数,当我try 映射时,我的列表将遵守,因为它可能仍未定义'list' is possibly 'undefined'.ts(18048)
Expected个 我有一个uniq函数,它可以正确地推断我的参数(如果没有定义的话)
Tries 我try 了重载函数,但没有好的结果,我也try 了这个帖子,同样的结果是Typescript - generic type guard for isEmpty function.
答案标记为Resolve并不能解决我的问题,因为我希望将其保留在一个函数中.
我用两个独立的函数来解决我的问题,一个用于数组,一个用于对象,如下所示,但我不想这样.
function isNonEmptyArray<T>(obj: T[] | undefined): obj is T[] {
return (
obj !== undefined && obj !== null && Array.isArray(obj) && obj.length > 0
);
}
function isNonEmptyObject<T>(obj: T | undefined): obj is T {
return (
obj !== undefined && obj !== null && Object.getOwnPropertyNames(obj).length !== 0
);
}