interface Set { add(value: T): Set; clear(): void; delete(value: T): boolean; entries(): Array<[T, T]>; forEach(callbackfn: (value: T, index: T, set: Set) => void, thisArg?: any): void; has(value: T): boolean; keys(): Array; size: number; } interface SetConstructor { new (): Set; new (iterable: Array): Set; prototype: Set; } declare const Set: SetConstructor; export class EnhancedSet extends Set { constructor(elements?: T[]); union(set: Set): EnhancedSet; intersect(set: Set): EnhancedSet; complement(set: Set): EnhancedSet; diff(set: Set): EnhancedSet; isSubsetOf(set: Set): boolean; isSupersetOf(set: Set): boolean; product(set: Set, separator?: string): EnhancedSet; power(m: number, separator?: string): EnhancedSet; permutations(m: number, separator?: string): EnhancedSet; equals(set: Set): boolean; filter(cb: (element: T) => boolean): EnhancedSet; toArray(): T[]; clone(): EnhancedSet; }