SelectFields type

Produce un'unione di percorsi di $select OData di ricerca AI validi per T utilizzando un attraversamento post-ordine dell'albero del campo radicato in T.

type SelectFields<TModel> = (() => (T extends TModel ? true : false) extends () => (T extends never ? true : false) ? string : (() => (T extends TModel ? true : false) extends () => (T extends any ? true : false) ? string : (() => (T extends TModel ? true : false) extends () => (T extends object ? true : false) ? string : (TModel extends Elem[] ? (Elem extends object ? SelectFields<Elem> : never) : {[Key in keyof TModel]: (Key extends string ? (NonNullable<...[...]> extends object ? (NonNullable<...> extends ExcludedODataTypes ? Key : (... extends ... ? ... : ...)) : Key) : never);}[(keyof TModel) & string] & string))))