I am using graphql with generated types and struggling with how to convert them to the type I need to pass it to my data service calls.
@graphql-codegen has given me an args type of
export type QueryOrdersArgs = {
ids: Array<Maybe<Scalars['ID']>>;
};
(I don't really understand why its generated as a Maybe type, as the graphql schema enforces that I only query with a parameter of an array of ids (strings))
In my resolver, I need to call into a service which takes an array of strings. Everything works as expected (with @ts-ignore) but now I need to fix up my types.
const { orderIds } = args;
const result = getOrder(orderIds);
I have a codesandbox with just the types here https://codesandbox.io/s/typescript-playground-export-forked-3fpx9?file=/index.ts
export type Maybe<T> = T | null;
export type Scalars = {
ID: string;
String: string;
Boolean: boolean;
Int: number;
Float: number;
_FieldSet: any;
};
let ids: Array<Maybe<Scalars["ID"]>>;
export const getOrders = (orderIds: Array<string>) => {
orderIds.map((x) => console.log(x));
};
getOrders(ids);
I currently get the error - "TS2345: Argument of type 'Maybe[]' is not assignable to parameter of type 'string[]'."
Any help greatly appreciated
If you're confident that it shouldn't be a Maybe type, you can cast it:
type Maybe<T> = T | null;
const maybeArray: Maybe<string>[] = [];
let stringArray: string[] = maybeArray as string[];
or in your case
getOrders(ids as string[]);