typescript - TypeScript 查询属性不存在
问题描述
我尝试使用 TypeScript 在 GraphQL 查询中添加查询类型,但我不明白为什么 TS 会返回此错误:
Property 'userMe' does not exist on type 'Query | null'.
我的查询:
const { userMe }: Query | null = cache.readQuery({
query: ME,
});
我的类型:
export type Query = {
__typename?: 'Query';
files?: Maybe<Array<Maybe<UploadFile>>>;
me?: Maybe<UsersPermissionsMe>;
userMe?: Maybe<CustomUsersPermissionsMe>;
};
userMe
存在,但不是必需的。我不明白为什么 TS 会为此哭泣:DI 使用 TS v3.7.5。
任何人都可以帮助我吗?
解决方案
cache.readQuery()
这是因为可能的返回值是null
. 它的返回类型是Query | null
错误消息的外观。如果它为空,您的代码将引发异常。
代替:
const { userMe }: Query | null = cache.readQuery({
query: ME,
});
你需要做:
const query = cache.readQuery({
query: ME,
});
const userMe = query && query.userMe ? query.userMe: undefined
您需要处理查询结果可能为空的事实,并且userMe
可能undefined
在非空查询上。
null
在高层次上,TypeScript 迫使您编写代码来处理事物可能存在或undefined
在运行时的事实。您的类型签名模拟了可能出现这种情况的两种情况(空查询结果和非空查询上的未定义字段)。
您如何在代码中处理它取决于您的程序在这种情况下的行为方式。
至少您可以执行以下操作:
if (userMe !=== undefined) {
// TS now knows that in here userMe is Maybe<CustomUsersPermissionsMe>
}
你必须防止 undefined 因为它在Query
对象本身上是可以为空的。然后它是一个Maybe
,所以你有一堆守卫要写。
推荐阅读
- powerapps - 在没有高级计划的情况下使用 Web 服务是否有其他选择?
- python - ValueError:视图 users.views.logout_user 没有返回 HttpResponse 对象。它返回 None 而不是
- git - 只读存在的远程 git 分支
- python - PIL PNG与Gif背景
- java - JDK 7 RECV TLSv1 ALERT:致命,handshake_failure
- python - 如何使用 Windows 10 中的 python (3.8) 脚本在 Cygwin 中运行程序?
- xslt-3.0 - XSLT 3.0 增量合并
- python - 使用 BioPython 进行半全局对齐
- android - 压缩图像后碎片屏幕回到主屏幕?
- android - Flutter:如何在 Flutter 中为动态创建的 TextFormFields 添加自动对焦?