Apollo 客户端的代码生成器在我的类型中添加了不需要的“或 null”

Pau*_*non 7 apollo graphql typescript-typings apollo-client

Apollo 客户端的代码生成器添加| null了生成的类型,我不明白它们为什么在那里以及如何摆脱它们。

我不明白为什么 API 会返回 null 数组,所以我不想每次都检查我的代码是否为 null。

来自 apollo codegen 的违规生成类型:

export interface MusicGenres_musicGenres {
  name: string;
}

export interface MusicGenres {
  musicGenres: (MusicGenres_musicGenres | null)[];
                                        ^^^^^^
                                         WHY ?
}
Run Code Online (Sandbox Code Playgroud)

我的 Graphql 架构:

type Query {
  musicGenres: [MusicGenre]!
}

type MusicGenre {
  id: ID!
  name: String!
}
Run Code Online (Sandbox Code Playgroud)

在我的 TypeScript 代码中查询生成类型:

gql`
  query MusicGenres {
    musicGenres { name }
  }
`
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 9

在您的架构中,您具有以下字段定义:

musicGenres: [MusicGenre]!
Run Code Online (Sandbox Code Playgroud)

这意味着虽然musicGenres将是一个列表并且其本身永远不会为空,但列表中的任何项目都可能为空。如果您想指示列表中的所有项目也不可为空,则您的字段定义应为:

musicGenres: [MusicGenre!]!
Run Code Online (Sandbox Code Playgroud)

请参阅这篇文章以获取详细解释。