gpt4 book ai didi

typescript - 如何在类型声明中从嵌套数组中提取类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:53 26 4
gpt4 key购买 nike

我有一个看起来像这样的生成类型:

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 的类型。

我想知道如何从该类型中提取成员对象中项目数组的类型,或者是否可能?

我想以这样的方式结束:

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'] 降低一级,但我收到一条错误消息,指出“属性成员资格不存在于类型 .. .'

这是因为 getUsermemberships 可能为空吗?有没有办法提取这种类型?任何指向资源的帮助我可以更好地理解这将是一个很大的帮助。

谢谢。

最佳答案

问题是,在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com