SelectFields type
Produces a union of valid AI Search OData $select paths for T using a post-order traversal of the field tree rooted at 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))))