Variables
typed-graphql-builder is capable of inferring the type of a variable based on its position in the query. To add a variable to a query, we can use one of the following two functions exported by the generated API
$
- the type of the variable will match the input type or argument type, exactly- If the input type or query argument type is non-null, the variable will forbid nulls
- If the input type or query argument allows nulls, the variable will allow nulls as well
$$
- the variable will be non-null, regardles of whether the input is nullable
Example:
Given a sample query, e.g.
import { $, query } from "./generated-api"
const countryQuery = query(q => [
q.countries({ filter: { continent: { eq: $("continentCode") } } }, c => [
c.code,
c.capital,
c.name,
c.languages(l => [l.name]),
]),
])
where the continentCode
is nullable, the output GraphQL will be
query ($continentCode: String) {
countries(filter: { continent: { eq: $continentCode } }) {
code
capital
name
languages {
name
}
}
}
and the TypeScript type of the variable continientCode
will be string | null | undefined
However, if we use $$
instead of $
import { $, query } from "./generated-api"
const countryQuery = query(q => [
q.countries({ filter: { continent: { eq: $$("continentCode") } } }, c => [
c.code,
c.capital,
c.name,
c.languages(l => [l.name]),
]),
])
We will get String!
as the query variable type in the GraphQL output:
query ($continentCode: String!) {
countries(filter: { continent: { eq: $continentCode } }) {
code
capital
name
languages {
name
}
}
}
and the TypeScript type of continentCode
will be string