export type TSetIncludes = (T extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? S extends L ? true : TSetIncludes : false); /** Returns true if element right is in the set of left */ export declare function SetIncludes(T: [...T], S: S): TSetIncludes; export type TSetIsSubset = (T extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TSetIncludes extends true ? TSetIsSubset : false : true); /** Returns true if left is a subset of right */ export declare function SetIsSubset(T: [...T], S: [...S]): TSetIsSubset; export type TSetDistinct = T extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TSetIncludes extends false ? TSetDistinct : TSetDistinct : Acc; /** Returns a distinct set of elements */ export declare function SetDistinct(T: [...T]): TSetDistinct; export type TSetIntersect = (T extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TSetIncludes extends true ? TSetIntersect : TSetIntersect : Acc); /** Returns the Intersect of the given sets */ export declare function SetIntersect(T: [...T], S: [...S]): TSetIntersect; export type TSetUnion = ([ ...T, ...S ]); /** Returns the Union of the given sets */ export declare function SetUnion(T: [...T], S: [...S]): TSetUnion; export type TSetComplement = (T extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TSetIncludes extends true ? TSetComplement : TSetComplement : Acc); /** Returns the Complement by omitting elements in T that are in S */ export declare function SetComplement(T: [...T], S: [...S]): TSetComplement; type TSetIntersectManyResolve = (T extends [infer L extends PropertyKey[], ...infer R extends PropertyKey[][]] ? TSetIntersectManyResolve> : Acc); export type TSetIntersectMany = (T extends [infer L extends PropertyKey[]] ? L : T extends [infer L extends PropertyKey[], ...infer R extends PropertyKey[][]] ? TSetIntersectManyResolve : []); export declare function SetIntersectMany(T: [...T]): TSetIntersectMany; export type TSetUnionMany = (T extends [infer L extends PropertyKey[], ...infer R extends PropertyKey[][]] ? TSetUnionMany> : Acc); /** Returns the Union of multiple sets */ export declare function SetUnionMany(T: [...T]): TSetUnionMany; export {};