typescript
args validation:
type ArgTypes = { undefined: any, LikeMutation: {postId: number}, OtherType: string, } type Like2Mutation = { field: 'fff' } type LikeMutation = { __typename: 'LikeMutation' } type QueryOptions<T> = { variables: T, multiple: boolean, } let r = query<LikeMutation>({ variables: {postId: 1}, multiple: false }) function query<T extends { __typename?: keyof ArgTypes } & {[key: string]: unknown}>( arg: QueryOptions<T['__typename'] extends keyof ArgTypes ? ArgTypes[T['__typename']] : any>): void{ } function query3<T extends {}>( arg: QueryOptions<'__typename' extends keyof T ? T['__typename'] extends keyof ArgTypes ? ArgTypes[T['__typename']] : any : any>): void{ } query({ variables: '222', multiple: false }); query<LikeMutation>({ variables: { postId: 8}, multiple: true }) query<Like2Mutation>({ variables: { postId: 8}, multiple: true })
(ваш голос учтен)