Skip to content

Instantly share code, notes, and snippets.

@Lucifier129
Created September 1, 2020 05:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lucifier129/e6c5c0923feeb19f4d36a73aff49c16a to your computer and use it in GitHub Desktop.
Save Lucifier129/e6c5c0923feeb19f4d36a73aff49c16a to your computer and use it in GitHub Desktop.
type GraphQLObject<T extends string> =
T extends `\ntype ${infer TypeName} {\n${infer Fields}}\n`
? {
name: TypeName,
fields: {
[key in keyof GraphQLObjectFields<Fields>]: GraphQLObjectFields<Fields>[key]
}
}
: never
type GraphQLObjectFields<T extends string> =
T extends ` ${infer FieldName}: ${infer FieldType}\n${infer Rest}`
? { [key in FieldName]: MaybeGraphQLListField<FieldType> } & GraphQLObjectFields<Rest>
: {}
type MaybeGraphQLListField<T extends string> =
T extends `[${infer I}]`
? Array<ToTS<I>>
: ToTS<T>
type ToTS<T extends string> =
T extends 'Int'
? number
: T extends 'Bool'
? boolean
: T extends 'String'
? string
: T
type T1 = GraphQLObject<`
type Test {
a: Int
b: String
c: [Bool]
}
`>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment