網站搜尋

如何像 apollo-client 一樣全局處理聯合類型?Typescript 對於 graphql 聯合類型拋出錯誤:屬性 'urls' 在類型 'Media' 上不存在


我有一個聯合類型 type Media=Image | Emoji,並且我在我的 GraphQL schema 中的許多不同且深度嵌套的實體上使用它。我也在使用 graphql-code-generator 來生成類型。我以前使用 apollo-client 來處理我的請求,它在快取中對聯合類型的處理非常出色。

const cache = new InMemoryCache({
    possibleTypes: {
      Media: ['Image', 'Emoji'],
      ...

但不知什麼原因,我不得不遷移到 react-query 和 graphql-request,現在每次我想使用 object.logo: Media 例如,這個 logo 可以有不同的類型,但 TypeScript 卻拋出這個錯誤:

Property 'url' does not exist on type 'Media'.
  Property 'url' does not exist on type 'Emoji'.

我不想每次都檢查類型並進行轉型,所以我想知道我如何能像 apollo-client 那樣在全局實現這個功能?