你好,我不会检查某些对象或数组为空或未定义或为空 所以我制作了一个util func这样的
const isEmpty = (obj: Array<any> | undefined | null | object): boolean => {
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) return false;
}
if (!obj) return true;
return true;
};
但是看看这个
if (!isEmpty(houseData)) {
const { GetAllHouseForSuperUser } = houseData; // ⛔️ error here
}
打字稿告诉我
Property 'GetAllHouseForSuperUser' does not exist on type 'getAllHouseForSuperUser | undefined'.
但在逻辑上
houseData不能不确定
我怎么注意到打字稿中的houseData不是未定义的?
有关界面的更新
export interface getAllHouseForSuperUser {
GetAllHouseForSuperUser: getAllHouseForSuperUser_GetAllHouseForSuperUser;
}
export interface getAllHouseForSuperUser_GetAllHouseForSuperUser {
__typename: 'GetAllHouseForSuperUserResponse';
ok: boolean;
error: string | null;
allHouse: getAllHouseForSuperUser_GetAllHouseForSuperUser_allHouse[] | null;
}
答案 0 :(得分:0)
TypeScript不会执行跨函数边界的数据流,它假定签名是准确的。这就是为什么在函数内部执行的检查不会传播到外部的原因。
这种情况下有一个功能,type guards。用户可以将它们定义为返回引用其参数之一的特殊类型的函数。在您的情况下,应这样写:
const isEmpty = (obj: Array<any> | undefined | null | object): obj is null | undefined => {
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) return false;
}
if (!obj) return true;
return true;
};
请注意obj is type
:这是显示从此函数返回的布尔值在类型级别上具有含义的方式。当然,由您来检查实现是否正确。