export abstract class ObjectSet < T > implements Set < T > { /**
     * Returns the string literal 'Set' for use by Object.prototype.toString.
     * This allows for identifying Sets without checking constructor identity.
     */ public readonly [ Symbol . toStringTag ] : 'Set' = 'Set' ; protected _values : Array < T > = [ ] ; param iterable constructor ( iterable ? ) { if ( iterable ) { for ( let item of iterable ) { this . add ( item ) ; } } } param value add ( value ) { if ( ! this . has ( value ) ) { this . _values . push ( value ) ; } return this ; } /**
     * Remove all values from the set.
     */ clear ( ) { this . _values = [ ] ; } param value abstract delete ( value ) ; /**
     * Returns an iterable two-member tuples for each item in the set, where
     * the item is provided twice.
     *
     * Part of the ES2015 Set specification for compatibility with Map objects.
     */ entries ( ) { return this . _values . map < [ T , T ] > ( value => [ value , value ] ) [ Symbol . iterator ] ( ) ; } param callback param thisArg forEach ( callback , thisArg ? ) { this . _values . forEach ( ( value , index , array ) => { callback . call ( thisArg , value , value , this ) ; } , thisArg ) ; } param value abstract has ( value ) ; /**
     * Returns an IterableIterator of each member of the set.
     */ keys ( ) { return this [ Symbol . iterator ] ( ) ; } /**
     * Returns the number of members in the set.
     */ get size ( ) : number { return this . _values . length ; } /**
     * Returns an IterableIterator of each member of the set.
     */ values ( ) { return this [ Symbol . iterator ] ( ) ; } /**
     * Returns an IterableIterator of each member of the set.
     */ [ Symbol . iterator ] ( ) { return this . _values [ Symbol . iterator ] ( ) ; } }