Skip to content

Instantly share code, notes, and snippets.

View schicks's full-sized avatar

sam schick schicks

View GitHub Profile
@schicks
schicks / index.ts
Created June 11, 2023 01:22
selection types for graphql queries
type Scalar = string | number | boolean | undefined | null
type ScalarsOf<T> = {[Key in keyof T]: T[Key] extends Scalar ? Key : never}[keyof T]
type ObjectsOf<T> = {[Key in keyof T]: T[Key] extends Scalar ? never : Key}[keyof T]
type Simplify<T> = T extends Function ? T : {[K in keyof T]: Simplify<T[K]>};
type ValuableKeys<T> = {[Key in keyof T]: T[Key] extends never ? never : Key}[keyof T]
type Nevertheless<T> = T extends {} ? {[K in ValuableKeys<T>]: Nevertheless<T[K]>} : T
type CompleteSelector<T> = {[Key in ScalarsOf<T>]: true} & {