NarrowedModel type

選択したフィールドのみを含むようにモデルの種類を絞り込みます

type NarrowedModel<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 TModel ? true : false) extends () => T extends any
          ? true
          : false
          ? TModel
          : () => (
              T extends TModel ? true : false
            ) extends () => T extends unknown ? true : false
              ? TModel
              : () => (
                  T extends TFields ? true : false
                ) extends () => T extends never ? true : false
                  ? never
                  : () => (
                      T extends TFields ? true : false
                    ) extends () => T extends SelectFields<TModel>
                      ? true
                      : false
                      ? TModel
                      : SearchPick<TModel, TFields>