我有一个生成的类型,如下所示:
export type GetUserWithMembershipsQuery = {
getUser: {
__typename: 'User';
id: string;
memberships: {
__typename: 'ModelUserMembershipConnection';
items: Array<{
__typename: 'UserMembership';
id: string;
createdOnDate: string | null;
renewedOnDate: string | null;
expiresOnDate: string | null;
membershipPhotoFileName: string | null;
} | null> | null;
} | null;
} | null;
};
我知道我可以通过 GetUserWithMembershipQuery['getUser']
获取 getUser 的类型。
我想知道如何从该类型中提取成员(member)对象中的项目数组的类型,或者是否可能?
我希望得到类似的结果:
type ItemType = GetUserWithMembershipQuery['getUser']['memberships']['items'][0]
结果类型是:
{
__typename: 'UserMembership';
id: string;
createdOnDate: string | null;
renewedOnDate: string | null;
expiresOnDate: string | null;
membershipPhotoFileName: string | null;
} | null
我尝试使用 GetUserWithMembershipQuery['getUser']['memberships']
进一步降低一级,但收到一条错误消息,指出“类型 .. 上不存在属性成员身份”。 .'
这是因为 getUser
或 memberships
可能为 null 吗?有什么办法可以提取这种类型吗?任何有关我如何更好地理解这一点的资源的帮助都会有很大的帮助。
谢谢。
最佳答案
问题是,在 strictNullChecks
下,如果类型位于具有 null
的联合中,则无法访问任何成员。值和类型表达式都是这种情况。您仍然可以获得该类型,但需要使用 Exclude
条件类型从联合中排除 null
。语法变得有点过于复杂,无法仅用一行编写,因此我将其分解为几个步骤:
type getUser = Exclude<GetUserWithMembershipsQuery['getUser'], null>
type memberships = Exclude<getUser['memberships'], null>
type items = Exclude<memberships['items'], null>
type item = Exclude<items[number], null>
关于typescript - 如何从类型声明中的嵌套数组中提取类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53137005/