我有一个生成的类型看起来像这样:
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的类型。
我想知道如何从该类型的成员资格对象中提取items数组的类型,或者是否有可能?
我想以这样的结尾:
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
可能为空吗?有没有办法我可以提取这种类型?指向资源的任何帮助,如果我能更好地理解这一点,将是很大的帮助。
谢谢。
答案 0 :(得分:2)
问题在于,在strictNullChecks
下,如果某个类型与null
合并,则将无法访问任何成员。值表达式和类型表达式都是这种情况。您仍然可以获取类型,但需要使用null
条件类型将Exclude
从联合中排除。语法变得太复杂,无法仅用一行编写,因此我分几步进行了分解:
type getUser = Exclude<GetUserWithMembershipsQuery['getUser'], null>
type memberships = Exclude<getUser['memberships'], null>
type items = Exclude<memberships['items'], null>
type item = Exclude<items[number], null>