我正在使用GraphQL,目前在我的代码中,我有一个GraphQLError对象,该对象具有名为extensions
的属性,其类型为void | { [key: string]: any; }
。这样做是为了,如果我尝试访问extensions
的任何属性,都会收到此错误:
x.extensions.code === 'UNAUTHENTICATED'
Property 'code' does not exist on type 'void | { [key: string]: any; }'.
Property 'code' does not exist on type 'void'.
访问联合类型中两种类型都不存在的属性的建议解决方案是:https://github.com/Microsoft/TypeScript/issues/12815#issuecomment-266193707
let pet = getSmallPet();
if ((<Fish>pet).swim) {
(<Fish>pet).swim();
}
else {
(<Bird>pet).fly();
}
但是,如果没有类型名称,我将无法进行类型断言。
关于如何解决此问题的任何想法?
关于, 理查德
答案 0 :(得分:0)
您可以使用类型防护来缩小并集的类型:
declare let o: {
extensions: void | { [key: string]: any; }
}
o.extensions["test"] // error
if (o.extensions) {
o.extensions["test"] // ok here
}
注意,仅当您打开strictNullChecks
时,您的代码才会引发错误