Related problem: nullability
A related problem is that a lot of fields from Guillotine that in reality is not nullable (e.g displayName
), is not set to nonNull()
in Guillotine.
Similarly fields in content types where <occurrences minimum="1"/>
should result in a GraphQL-type that is not nullable.
The problem for me is when I run TypeScript-code generation like described here, I get types back that are much more difficult to work with, then if they were not nullable.
Example
The “null | undefined
” type is in reality not true for displayName
, so we are making this a lot more difficult to program against then it should be.
export type ContentByPathQuery = {
__typename?: 'Query'
guillotine?:
| {
__typename?: 'HeadlessCms'
get?:
| { __typename?: 'base_Folder'; displayName?: string | null | undefined }
| { __typename?: 'base_Media'; displayName?: string | null | undefined }
| { __typename?: 'base_Shortcut'; displayName?: string | null | undefined }
| { __typename?: 'base_Structured'; displayName?: string | null | undefined }
| { __typename?: 'base_Unstructured'; displayName?: string | null | undefined }
| { __typename?: 'media_Archive'; displayName?: string | null | undefined }
| { __typename?: 'media_Audio'; displayName?: string | null | undefined }
| { __typename?: 'media_Code'; displayName?: string | null | undefined }
| { __typename?: 'media_Data'; displayName?: string | null | undefined }
| { __typename?: 'media_Document'; displayName?: string | null | undefined }
| { __typename?: 'media_Executable'; displayName?: string | null | undefined }
| { __typename?: 'media_Image'; displayName?: string | null | undefined }
| { __typename?: 'media_Presentation'; displayName?: string | null | undefined }
| { __typename?: 'media_Spreadsheet'; displayName?: string | null | undefined }
| { __typename?: 'media_Text'; displayName?: string | null | undefined }
| { __typename?: 'media_Unknown'; displayName?: string | null | undefined }
| { __typename?: 'media_Vector'; displayName?: string | null | undefined }
| { __typename?: 'media_Video'; displayName?: string | null | undefined }
| {
__typename?: 'com_nerdforge_Article'
displayName?: string | null | undefined
data?:
| {
__typename?: 'com_nerdforge_Article_Data'
intro?:
| { __typename?: 'RichText'; processedHtml?: string | null | undefined }
| null
| undefined
}
| null
| undefined
}
| { __typename?: 'portal_Fragment'; displayName?: string | null | undefined }
| { __typename?: 'portal_PageTemplate'; displayName?: string | null | undefined }
| { __typename?: 'portal_Site'; displayName?: string | null | undefined }
| { __typename?: 'portal_TemplateFolder'; displayName?: string | null | undefined }
| null
| undefined
}
| null
| undefined
}