I get a TypeScript type autogenerated from AWS-Amplify GraphQL (which uses apollo-codegen I believe) like such:
export type GetNoteQuery = {
getNote: {
__typename: "Note",
id: string,
createdAt: string | null,
updatedAt: string | null,
title: boolean | null,
content: string | null,
} | null,
I want to generate a base type of "Note" to use as "base" type to use in my code when using the returned data. I.e. mapping notes onto a React component, etc.
Is there a way to narrow this type that is auto generated, or to extend it in some way, to have it look like:
type Note = {
id: string,
createdAt: string | null,
updatedAt: string | null,
title: boolean | null,
content: string | null
}
GraphQL-CodeGen is a CLI that can generate code from your GraphQL operations and schema. In React projects using typescript operations, it is very helpful to map GraphQL schema into interfaces. GraphQL can also generate hooks from operations.
Apollo's GraphQL CodegenDownload any GraphQL schema using a GraphQL endpoint. Generate TypeScript types for queries written in an Apollo Client project (given a valid GraphQL schema)
You can use an index query to get the type of getNote
coupled with Exclude
to get rid of the the null
from the property type. You then can use Omit
to get rid of the extra property.
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'>
You can also use an interface to get a stronger name for the type:
interface Note extends Omit<Exclude<GetNoteQuery['getNote'], null>, '__typename'> { }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With