import { DisableNever, DisableNeverArray } from "../never"; import { DisableUnion } from "../union"; // Just a remember: the T is not a Caster. It is a complex object. type IsObject = [T] extends [ { /* Empty */ }, ] ? unknown : never; // export type ExactlyCustom = DisableNever & DisableUnion & IsObject; type ObjectArray = [T] extends [Array] ? IsObject & DisableUnion : never; type DisableObjectTuple = [T] extends [ [ { /* Emtpy */ }, ...unknown[] ], ] ? never : unknown; export type ExactlyCustomArray = DisableNever & DisableNeverArray & ObjectArray & DisableObjectTuple;