Как сузить Typescript Типы, автоматически сгенерированные codeQL codegen? - PullRequest
1 голос
/ 03 ноября 2019

Я получаю тип TypeScript, автоматически сгенерированный из AWS-Amplify GraphQL (который использует apollo-codegen, я полагаю) следующим образом:

export type GetNoteQuery = {
  getNote:  {
    __typename: "Note",
    id: string,
    createdAt: string | null,
    updatedAt: string | null,
    title: boolean | null,
    content: string | null,
  } | null,

Я хочу создать базовый тип «Note» для использования в качестве «базовый тип для использования в моем коде при использовании возвращаемых данных. Т.е. отображение заметок на компонент React и т. Д.

Есть ли способ сузить этот тип, который генерируется автоматически, или каким-то образом расширить его, чтобы он выглядел следующим образом:

type Note = {
    id: string,
    createdAt: string | null,
    updatedAt: string | null,
    title: boolean | null,
    content: string | null
}

1 Ответ

1 голос
/ 03 ноября 2019

Вы можете использовать индексный запрос, чтобы получить тип getNote в сочетании с Exclude, чтобы избавиться от null от типа свойства. Затем вы можете использовать Omit, чтобы избавиться от дополнительного свойства.

export type GetNoteQuery = {
  getNote: {
    __typename: "Note",
    id: string,
    createdAt: string | null,
    updatedAt: string | null,
    title: boolean | null,
    content: string | null,
  } | null
}

type Note = Omit<Exclude<GetNoteQuery['getNote'], null>, '__typename'>

Вы также можете использовать интерфейс, чтобы получить более сильное имя для типа:


interface Note extends Omit<Exclude<GetNoteQuery['getNote'], null>, '__typename'> { }


...