Open
Description
Given the code below:
export const query = graphql`
query AppQuery($showEmail: Boolean!) @raw_response_type {
...AppFragment
...AppConditionalFragment
}
`;
export const fragment = graphql`
fragment AppFragment on Query {
account {
name
}
}
`;
export const conditionalFragment = graphql`
fragment AppConditionalFragment on Query {
account @include(if: $showEmail) {
email
}
}
`;
Relay compiler generates the following types (notice the account
field is listed twice):
export type AppQuery$rawResponse = {
readonly account: {
readonly id: string;
readonly name: string;
} | null | undefined;
readonly account: {
readonly email: string;
} | null | undefined;
};
Which typescript interprets by using the first declaration of a given field and ignoring all others, leading to errors like:

This very reproduction can be found at https://github.com/vhfmag/relay-ts-typegen-issue-repro
Instead, relay compiler should generate something like:
export type AppQuery$rawResponse = {
readonly account: {
readonly id: string;
readonly name: string;
readonly email?: string | null | undefined;
} | null | undefined;
};