Share via


SuggestNarrowedModel type

type SuggestNarrowedModel<TModel, TFields> = () => (
  T extends TModel ? true : false
) extends () => T extends never ? true : false
  ? TModel
  : () => (T extends TModel ? true : false) extends () => T extends object
      ? true
      : false
      ? TModel
      : () => (T extends TFields ? true : false) extends () => T extends never
          ? true
          : false
          ? keyof ExtractDocumentKey<TModel> extends never
            ? TModel
            : ExtractDocumentKey<TModel>
          : TFields extends SelectFields<TModel>
          ? NarrowedModel<TModel, TFields>
          : never