add types for set methods proposal (#57230)

This commit is contained in:
Kevin Gibbons 2024-05-16 14:19:25 -07:00 committed by GitHub
parent 4da470da37
commit e8274f74f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 1083 additions and 12 deletions

View File

@ -9,3 +9,80 @@ interface MapConstructor {
keySelector: (item: T, index: number) => K,
): Map<K, T[]>;
}
interface ReadonlySetLike<T> {
/**
* Despite its name, returns an iterator of the values in the set-like.
*/
keys(): Iterator<T>;
/**
* @returns a boolean indicating whether an element with the specified value exists in the set-like or not.
*/
has(value: T): boolean;
/**
* @returns the number of (unique) elements in the set-like.
*/
readonly size: number;
}
interface Set<T> {
/**
* @returns a new Set containing all the elements in this Set and also all the elements in the argument.
*/
union<U>(other: ReadonlySetLike<U>): Set<T | U>;
/**
* @returns a new Set containing all the elements which are both in this Set and in the argument.
*/
intersection<U>(other: ReadonlySetLike<U>): Set<T & U>;
/**
* @returns a new Set containing all the elements in this Set which are not also in the argument.
*/
difference<U>(other: ReadonlySetLike<U>): Set<T>;
/**
* @returns a new Set containing all the elements which are in either this Set or in the argument, but not in both.
*/
symmetricDifference<U>(other: ReadonlySetLike<U>): Set<T | U>;
/**
* @returns a boolean indicating whether all the elements in this Set are also in the argument.
*/
isSubsetOf(other: ReadonlySetLike<unknown>): boolean;
/**
* @returns a boolean indicating whether all the elements in the argument are also in this Set.
*/
isSupersetOf(other: ReadonlySetLike<unknown>): boolean;
/**
* @returns a boolean indicating whether this Set has no elements in common with the argument.
*/
isDisjointFrom(other: ReadonlySetLike<unknown>): boolean;
}
interface ReadonlySet<T> {
/**
* @returns a new Set containing all the elements in this Set and also all the elements in the argument.
*/
union<U>(other: ReadonlySetLike<U>): Set<T | U>;
/**
* @returns a new Set containing all the elements which are both in this Set and in the argument.
*/
intersection<U>(other: ReadonlySetLike<U>): Set<T & U>;
/**
* @returns a new Set containing all the elements in this Set which are not also in the argument.
*/
difference<U>(other: ReadonlySetLike<U>): Set<T>;
/**
* @returns a new Set containing all the elements which are in either this Set or in the argument, but not in both.
*/
symmetricDifference<U>(other: ReadonlySetLike<U>): Set<T | U>;
/**
* @returns a boolean indicating whether all the elements in this Set are also in the argument.
*/
isSubsetOf(other: ReadonlySetLike<unknown>): boolean;
/**
* @returns a boolean indicating whether all the elements in the argument are also in this Set.
*/
isSupersetOf(other: ReadonlySetLike<unknown>): boolean;
/**
* @returns a boolean indicating whether this Set has no elements in common with the argument.
*/
isDisjointFrom(other: ReadonlySetLike<unknown>): boolean;
}

View File

@ -69,7 +69,7 @@ export abstract class BaseObservable<T, TChange = void> extends ConvenientObserv
protected readonly observers = new Set<IObserver>();
>observers : Symbol(BaseObservable.observers, Decl(classExtendingAbstractClassWithMemberCalledTheSameAsItsOwnTypeParam.ts, 18, 98))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>IObserver : Symbol(IObserver, Decl(classExtendingAbstractClassWithMemberCalledTheSameAsItsOwnTypeParam.ts, 0, 0))
}

View File

@ -13,7 +13,7 @@ const IterableWeakMap_cleanup = ({ ref, set }: {
readonly set: Set<WeakRef<object>>;
>set : Symbol(set, Decl(esNextWeakRefs_IterableWeakMap.ts, 2, 34))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>WeakRef : Symbol(WeakRef, Decl(lib.es2021.weakref.d.ts, --, --), Decl(lib.es2021.weakref.d.ts, --, --))
}) => {
@ -52,7 +52,7 @@ export class IterableWeakMap<K extends object, V> implements WeakMap<K, V> {
#refSet = new Set<WeakRef<K>>();
>#refSet : Symbol(IterableWeakMap.#refSet, Decl(esNextWeakRefs_IterableWeakMap.ts, 12, 72))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>WeakRef : Symbol(WeakRef, Decl(lib.es2021.weakref.d.ts, --, --), Decl(lib.es2021.weakref.d.ts, --, --))
>K : Symbol(K, Decl(esNextWeakRefs_IterableWeakMap.ts, 9, 29))

View File

@ -7,5 +7,5 @@
*/
class My extends Set {}
>My : Symbol(My, Decl(bug25101.js, 0, 0))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))

View File

@ -24,9 +24,9 @@ type Employee = { name: string, role: 'ic' | 'manager' }
const employees: Set<Employee> = new Set();
>employees : Symbol(employees, Decl(mapGroupBy.ts, 5, 5))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>Employee : Symbol(Employee, Decl(mapGroupBy.ts, 2, 46))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
const byRole = Map.groupBy(employees, x => x.role);
>byRole : Symbol(byRole, Decl(mapGroupBy.ts, 6, 5))

View File

@ -24,9 +24,9 @@ type Employee = { name: string, role: 'ic' | 'manager' }
const employees: Set<Employee> = new Set();
>employees : Symbol(employees, Decl(objectGroupBy.ts, 5, 5))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>Employee : Symbol(Employee, Decl(objectGroupBy.ts, 2, 49))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
const byRole = Object.groupBy(employees, x => x.role);
>byRole : Symbol(byRole, Decl(objectGroupBy.ts, 6, 5))

View File

@ -0,0 +1,80 @@
setMethods.ts(13,17): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
Type 'undefined[]' is missing the following properties from type 'ReadonlySetLike<unknown>': has, size
setMethods.ts(19,24): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
setMethods.ts(25,22): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
setMethods.ts(31,31): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
setMethods.ts(37,22): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
setMethods.ts(43,24): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
setMethods.ts(49,26): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
==== setMethods.ts (7 errors) ====
let numberSet = new Set([0, 1, 2]);
let stringSet = new Set(["a", "b"]);
let numberMap = new Map([[4, {}], [5, {}]]);
let numberSetLike = {
size: 1,
*keys() { yield 3 },
has(x) { return x === 3 },
};
numberSet.union([]);
~~
!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
!!! error TS2345: Type 'undefined[]' is missing the following properties from type 'ReadonlySetLike<unknown>': has, size
numberSet.union(new Set);
numberSet.union(stringSet);
numberSet.union(numberMap);
numberSet.union(numberSetLike);
numberSet.intersection([]);
~~
!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
numberSet.intersection(new Set);
numberSet.intersection(stringSet);
numberSet.intersection(numberMap);
numberSet.intersection(numberSetLike);
numberSet.difference([]);
~~
!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
numberSet.difference(new Set);
numberSet.difference(stringSet);
numberSet.difference(numberMap);
numberSet.difference(numberSetLike);
numberSet.symmetricDifference([]);
~~
!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
numberSet.symmetricDifference(new Set);
numberSet.symmetricDifference(stringSet);
numberSet.symmetricDifference(numberMap);
numberSet.symmetricDifference(numberSetLike);
numberSet.isSubsetOf([]);
~~
!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
numberSet.isSubsetOf(new Set);
numberSet.isSubsetOf(stringSet);
numberSet.isSubsetOf(numberMap);
numberSet.isSubsetOf(numberSetLike);
numberSet.isSupersetOf([]);
~~
!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
numberSet.isSupersetOf(new Set);
numberSet.isSupersetOf(stringSet);
numberSet.isSupersetOf(numberMap);
numberSet.isSupersetOf(numberSetLike);
numberSet.isDisjointFrom([]);
~~
!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'ReadonlySetLike<unknown>'.
numberSet.isDisjointFrom(new Set);
numberSet.isDisjointFrom(stringSet);
numberSet.isDisjointFrom(numberMap);
numberSet.isDisjointFrom(numberSetLike);

View File

@ -0,0 +1,102 @@
//// [tests/cases/compiler/setMethods.ts] ////
//// [setMethods.ts]
let numberSet = new Set([0, 1, 2]);
let stringSet = new Set(["a", "b"]);
let numberMap = new Map([[4, {}], [5, {}]]);
let numberSetLike = {
size: 1,
*keys() { yield 3 },
has(x) { return x === 3 },
};
numberSet.union([]);
numberSet.union(new Set);
numberSet.union(stringSet);
numberSet.union(numberMap);
numberSet.union(numberSetLike);
numberSet.intersection([]);
numberSet.intersection(new Set);
numberSet.intersection(stringSet);
numberSet.intersection(numberMap);
numberSet.intersection(numberSetLike);
numberSet.difference([]);
numberSet.difference(new Set);
numberSet.difference(stringSet);
numberSet.difference(numberMap);
numberSet.difference(numberSetLike);
numberSet.symmetricDifference([]);
numberSet.symmetricDifference(new Set);
numberSet.symmetricDifference(stringSet);
numberSet.symmetricDifference(numberMap);
numberSet.symmetricDifference(numberSetLike);
numberSet.isSubsetOf([]);
numberSet.isSubsetOf(new Set);
numberSet.isSubsetOf(stringSet);
numberSet.isSubsetOf(numberMap);
numberSet.isSubsetOf(numberSetLike);
numberSet.isSupersetOf([]);
numberSet.isSupersetOf(new Set);
numberSet.isSupersetOf(stringSet);
numberSet.isSupersetOf(numberMap);
numberSet.isSupersetOf(numberSetLike);
numberSet.isDisjointFrom([]);
numberSet.isDisjointFrom(new Set);
numberSet.isDisjointFrom(stringSet);
numberSet.isDisjointFrom(numberMap);
numberSet.isDisjointFrom(numberSetLike);
//// [setMethods.js]
let numberSet = new Set([0, 1, 2]);
let stringSet = new Set(["a", "b"]);
let numberMap = new Map([[4, {}], [5, {}]]);
let numberSetLike = {
size: 1,
*keys() { yield 3; },
has(x) { return x === 3; },
};
numberSet.union([]);
numberSet.union(new Set);
numberSet.union(stringSet);
numberSet.union(numberMap);
numberSet.union(numberSetLike);
numberSet.intersection([]);
numberSet.intersection(new Set);
numberSet.intersection(stringSet);
numberSet.intersection(numberMap);
numberSet.intersection(numberSetLike);
numberSet.difference([]);
numberSet.difference(new Set);
numberSet.difference(stringSet);
numberSet.difference(numberMap);
numberSet.difference(numberSetLike);
numberSet.symmetricDifference([]);
numberSet.symmetricDifference(new Set);
numberSet.symmetricDifference(stringSet);
numberSet.symmetricDifference(numberMap);
numberSet.symmetricDifference(numberSetLike);
numberSet.isSubsetOf([]);
numberSet.isSubsetOf(new Set);
numberSet.isSubsetOf(stringSet);
numberSet.isSubsetOf(numberMap);
numberSet.isSubsetOf(numberSetLike);
numberSet.isSupersetOf([]);
numberSet.isSupersetOf(new Set);
numberSet.isSupersetOf(stringSet);
numberSet.isSupersetOf(numberMap);
numberSet.isSupersetOf(numberSetLike);
numberSet.isDisjointFrom([]);
numberSet.isDisjointFrom(new Set);
numberSet.isDisjointFrom(stringSet);
numberSet.isDisjointFrom(numberMap);
numberSet.isDisjointFrom(numberSetLike);

View File

@ -0,0 +1,234 @@
//// [tests/cases/compiler/setMethods.ts] ////
=== setMethods.ts ===
let numberSet = new Set([0, 1, 2]);
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
let stringSet = new Set(["a", "b"]);
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
let numberMap = new Map([[4, {}], [5, {}]]);
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
let numberSetLike = {
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))
size: 1,
>size : Symbol(size, Decl(setMethods.ts, 6, 21))
*keys() { yield 3 },
>keys : Symbol(keys, Decl(setMethods.ts, 7, 10))
has(x) { return x === 3 },
>has : Symbol(has, Decl(setMethods.ts, 8, 22))
>x : Symbol(x, Decl(setMethods.ts, 9, 6))
>x : Symbol(x, Decl(setMethods.ts, 9, 6))
};
numberSet.union([]);
>numberSet.union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
numberSet.union(new Set);
>numberSet.union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
numberSet.union(stringSet);
>numberSet.union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
numberSet.union(numberMap);
>numberSet.union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
numberSet.union(numberSetLike);
>numberSet.union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>union : Symbol(Set.union, Decl(lib.esnext.collection.d.ts, --, --))
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))
numberSet.intersection([]);
>numberSet.intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
numberSet.intersection(new Set);
>numberSet.intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
numberSet.intersection(stringSet);
>numberSet.intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
numberSet.intersection(numberMap);
>numberSet.intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
numberSet.intersection(numberSetLike);
>numberSet.intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>intersection : Symbol(Set.intersection, Decl(lib.esnext.collection.d.ts, --, --))
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))
numberSet.difference([]);
>numberSet.difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
numberSet.difference(new Set);
>numberSet.difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
numberSet.difference(stringSet);
>numberSet.difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
numberSet.difference(numberMap);
>numberSet.difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
numberSet.difference(numberSetLike);
>numberSet.difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>difference : Symbol(Set.difference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))
numberSet.symmetricDifference([]);
>numberSet.symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
numberSet.symmetricDifference(new Set);
>numberSet.symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
numberSet.symmetricDifference(stringSet);
>numberSet.symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
numberSet.symmetricDifference(numberMap);
>numberSet.symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
numberSet.symmetricDifference(numberSetLike);
>numberSet.symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>symmetricDifference : Symbol(Set.symmetricDifference, Decl(lib.esnext.collection.d.ts, --, --))
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))
numberSet.isSubsetOf([]);
>numberSet.isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
numberSet.isSubsetOf(new Set);
>numberSet.isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
numberSet.isSubsetOf(stringSet);
>numberSet.isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
numberSet.isSubsetOf(numberMap);
>numberSet.isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
numberSet.isSubsetOf(numberSetLike);
>numberSet.isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSubsetOf : Symbol(Set.isSubsetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))
numberSet.isSupersetOf([]);
>numberSet.isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
numberSet.isSupersetOf(new Set);
>numberSet.isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
numberSet.isSupersetOf(stringSet);
>numberSet.isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
numberSet.isSupersetOf(numberMap);
>numberSet.isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
numberSet.isSupersetOf(numberSetLike);
>numberSet.isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isSupersetOf : Symbol(Set.isSupersetOf, Decl(lib.esnext.collection.d.ts, --, --))
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))
numberSet.isDisjointFrom([]);
>numberSet.isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
numberSet.isDisjointFrom(new Set);
>numberSet.isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
numberSet.isDisjointFrom(stringSet);
>numberSet.isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>stringSet : Symbol(stringSet, Decl(setMethods.ts, 2, 3))
numberSet.isDisjointFrom(numberMap);
>numberSet.isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>numberMap : Symbol(numberMap, Decl(setMethods.ts, 4, 3))
numberSet.isDisjointFrom(numberSetLike);
>numberSet.isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>numberSet : Symbol(numberSet, Decl(setMethods.ts, 0, 3))
>isDisjointFrom : Symbol(Set.isDisjointFrom, Decl(lib.esnext.collection.d.ts, --, --))
>numberSetLike : Symbol(numberSetLike, Decl(setMethods.ts, 6, 3))

View File

@ -0,0 +1,523 @@
//// [tests/cases/compiler/setMethods.ts] ////
=== setMethods.ts ===
let numberSet = new Set([0, 1, 2]);
>numberSet : Set<number>
> : ^^^^^^^^^^^
>new Set([0, 1, 2]) : Set<number>
> : ^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
>[0, 1, 2] : number[]
> : ^^^^^^^^
>0 : 0
> : ^
>1 : 1
> : ^
>2 : 2
> : ^
let stringSet = new Set(["a", "b"]);
>stringSet : Set<string>
> : ^^^^^^^^^^^
>new Set(["a", "b"]) : Set<string>
> : ^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
>["a", "b"] : string[]
> : ^^^^^^^^
>"a" : "a"
> : ^^^
>"b" : "b"
> : ^^^
let numberMap = new Map([[4, {}], [5, {}]]);
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
>new Map([[4, {}], [5, {}]]) : Map<number, {}>
> : ^^^^^^^^^^^^^^^
>Map : MapConstructor
> : ^^^^^^^^^^^^^^
>[[4, {}], [5, {}]] : [number, {}][]
> : ^^^^^^^^^^^^^^
>[4, {}] : [number, {}]
> : ^^^^^^^^^^^^
>4 : 4
> : ^
>{} : {}
> : ^^
>[5, {}] : [number, {}]
> : ^^^^^^^^^^^^
>5 : 5
> : ^
>{} : {}
> : ^^
let numberSetLike = {
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
>{ size: 1, *keys() { yield 3 }, has(x) { return x === 3 },} : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
size: 1,
>size : number
> : ^^^^^^
>1 : 1
> : ^
*keys() { yield 3 },
>keys : () => Generator<number, void, unknown>
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>yield 3 : any
> : ^^^
>3 : 3
> : ^
has(x) { return x === 3 },
>has : (x: any) => boolean
> : ^ ^^^^^^^^^^^^^^^^^
>x : any
> : ^^^
>x === 3 : boolean
> : ^^^^^^^
>x : any
> : ^^^
>3 : 3
> : ^
};
numberSet.union([]);
>numberSet.union([]) : Set<unknown>
> : ^^^^^^^^^^^^
>numberSet.union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>[] : undefined[]
> : ^^^^^^^^^^^
numberSet.union(new Set);
>numberSet.union(new Set) : Set<unknown>
> : ^^^^^^^^^^^^
>numberSet.union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>new Set : Set<unknown>
> : ^^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
numberSet.union(stringSet);
>numberSet.union(stringSet) : Set<string | number>
> : ^^^^^^^^^^^^^^^^^^^^
>numberSet.union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>stringSet : Set<string>
> : ^^^^^^^^^^^
numberSet.union(numberMap);
>numberSet.union(numberMap) : Set<number>
> : ^^^^^^^^^^^
>numberSet.union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
numberSet.union(numberSetLike);
>numberSet.union(numberSetLike) : Set<any>
> : ^^^^^^^^
>numberSet.union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>union : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
numberSet.intersection([]);
>numberSet.intersection([]) : Set<number>
> : ^^^^^^^^^^^
>numberSet.intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>[] : undefined[]
> : ^^^^^^^^^^^
numberSet.intersection(new Set);
>numberSet.intersection(new Set) : Set<number>
> : ^^^^^^^^^^^
>numberSet.intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>new Set : Set<unknown>
> : ^^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
numberSet.intersection(stringSet);
>numberSet.intersection(stringSet) : Set<never>
> : ^^^^^^^^^^
>numberSet.intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>stringSet : Set<string>
> : ^^^^^^^^^^^
numberSet.intersection(numberMap);
>numberSet.intersection(numberMap) : Set<number>
> : ^^^^^^^^^^^
>numberSet.intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
numberSet.intersection(numberSetLike);
>numberSet.intersection(numberSetLike) : Set<any>
> : ^^^^^^^^
>numberSet.intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>intersection : <U>(other: ReadonlySetLike<U>) => Set<number & U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
numberSet.difference([]);
>numberSet.difference([]) : Set<number>
> : ^^^^^^^^^^^
>numberSet.difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>[] : undefined[]
> : ^^^^^^^^^^^
numberSet.difference(new Set);
>numberSet.difference(new Set) : Set<number>
> : ^^^^^^^^^^^
>numberSet.difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>new Set : Set<unknown>
> : ^^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
numberSet.difference(stringSet);
>numberSet.difference(stringSet) : Set<number>
> : ^^^^^^^^^^^
>numberSet.difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>stringSet : Set<string>
> : ^^^^^^^^^^^
numberSet.difference(numberMap);
>numberSet.difference(numberMap) : Set<number>
> : ^^^^^^^^^^^
>numberSet.difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
numberSet.difference(numberSetLike);
>numberSet.difference(numberSetLike) : Set<number>
> : ^^^^^^^^^^^
>numberSet.difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>difference : <U>(other: ReadonlySetLike<U>) => Set<number>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
numberSet.symmetricDifference([]);
>numberSet.symmetricDifference([]) : Set<unknown>
> : ^^^^^^^^^^^^
>numberSet.symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>[] : undefined[]
> : ^^^^^^^^^^^
numberSet.symmetricDifference(new Set);
>numberSet.symmetricDifference(new Set) : Set<unknown>
> : ^^^^^^^^^^^^
>numberSet.symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>new Set : Set<unknown>
> : ^^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
numberSet.symmetricDifference(stringSet);
>numberSet.symmetricDifference(stringSet) : Set<string | number>
> : ^^^^^^^^^^^^^^^^^^^^
>numberSet.symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>stringSet : Set<string>
> : ^^^^^^^^^^^
numberSet.symmetricDifference(numberMap);
>numberSet.symmetricDifference(numberMap) : Set<number>
> : ^^^^^^^^^^^
>numberSet.symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
numberSet.symmetricDifference(numberSetLike);
>numberSet.symmetricDifference(numberSetLike) : Set<any>
> : ^^^^^^^^
>numberSet.symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>symmetricDifference : <U>(other: ReadonlySetLike<U>) => Set<number | U>
> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
numberSet.isSubsetOf([]);
>numberSet.isSubsetOf([]) : boolean
> : ^^^^^^^
>numberSet.isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>[] : undefined[]
> : ^^^^^^^^^^^
numberSet.isSubsetOf(new Set);
>numberSet.isSubsetOf(new Set) : boolean
> : ^^^^^^^
>numberSet.isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>new Set : Set<unknown>
> : ^^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
numberSet.isSubsetOf(stringSet);
>numberSet.isSubsetOf(stringSet) : boolean
> : ^^^^^^^
>numberSet.isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>stringSet : Set<string>
> : ^^^^^^^^^^^
numberSet.isSubsetOf(numberMap);
>numberSet.isSubsetOf(numberMap) : boolean
> : ^^^^^^^
>numberSet.isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
numberSet.isSubsetOf(numberSetLike);
>numberSet.isSubsetOf(numberSetLike) : boolean
> : ^^^^^^^
>numberSet.isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSubsetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
numberSet.isSupersetOf([]);
>numberSet.isSupersetOf([]) : boolean
> : ^^^^^^^
>numberSet.isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>[] : undefined[]
> : ^^^^^^^^^^^
numberSet.isSupersetOf(new Set);
>numberSet.isSupersetOf(new Set) : boolean
> : ^^^^^^^
>numberSet.isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>new Set : Set<unknown>
> : ^^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
numberSet.isSupersetOf(stringSet);
>numberSet.isSupersetOf(stringSet) : boolean
> : ^^^^^^^
>numberSet.isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>stringSet : Set<string>
> : ^^^^^^^^^^^
numberSet.isSupersetOf(numberMap);
>numberSet.isSupersetOf(numberMap) : boolean
> : ^^^^^^^
>numberSet.isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
numberSet.isSupersetOf(numberSetLike);
>numberSet.isSupersetOf(numberSetLike) : boolean
> : ^^^^^^^
>numberSet.isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isSupersetOf : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
numberSet.isDisjointFrom([]);
>numberSet.isDisjointFrom([]) : boolean
> : ^^^^^^^
>numberSet.isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>[] : undefined[]
> : ^^^^^^^^^^^
numberSet.isDisjointFrom(new Set);
>numberSet.isDisjointFrom(new Set) : boolean
> : ^^^^^^^
>numberSet.isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>new Set : Set<unknown>
> : ^^^^^^^^^^^^
>Set : SetConstructor
> : ^^^^^^^^^^^^^^
numberSet.isDisjointFrom(stringSet);
>numberSet.isDisjointFrom(stringSet) : boolean
> : ^^^^^^^
>numberSet.isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>stringSet : Set<string>
> : ^^^^^^^^^^^
numberSet.isDisjointFrom(numberMap);
>numberSet.isDisjointFrom(numberMap) : boolean
> : ^^^^^^^
>numberSet.isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberMap : Map<number, {}>
> : ^^^^^^^^^^^^^^^
numberSet.isDisjointFrom(numberSetLike);
>numberSet.isDisjointFrom(numberSetLike) : boolean
> : ^^^^^^^
>numberSet.isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSet : Set<number>
> : ^^^^^^^^^^^
>isDisjointFrom : (other: ReadonlySetLike<unknown>) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>numberSetLike : { size: number; keys(): Generator<number, void, unknown>; has(x: any): boolean; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^

View File

@ -19,16 +19,16 @@ type Bar1<T extends unknown[][]> = T
type Foo2<A> = Set<A> extends Set<unknown[]> ? Bar2<Set<A>> : 'else'
>Foo2 : Symbol(Foo2, Decl(substitutionTypePassedToExtends.ts, 1, 36))
>A : Symbol(A, Decl(substitutionTypePassedToExtends.ts, 3, 10))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>A : Symbol(A, Decl(substitutionTypePassedToExtends.ts, 3, 10))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>Bar2 : Symbol(Bar2, Decl(substitutionTypePassedToExtends.ts, 3, 68))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>A : Symbol(A, Decl(substitutionTypePassedToExtends.ts, 3, 10))
type Bar2<T extends Set<unknown[]>> = T
>Bar2 : Symbol(Bar2, Decl(substitutionTypePassedToExtends.ts, 3, 68))
>T : Symbol(T, Decl(substitutionTypePassedToExtends.ts, 4, 10))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --))
>T : Symbol(T, Decl(substitutionTypePassedToExtends.ts, 4, 10))

View File

@ -0,0 +1,55 @@
// @target: esnext
let numberSet = new Set([0, 1, 2]);
let stringSet = new Set(["a", "b"]);
let numberMap = new Map([[4, {}], [5, {}]]);
let numberSetLike = {
size: 1,
*keys() { yield 3 },
has(x) { return x === 3 },
};
numberSet.union([]);
numberSet.union(new Set);
numberSet.union(stringSet);
numberSet.union(numberMap);
numberSet.union(numberSetLike);
numberSet.intersection([]);
numberSet.intersection(new Set);
numberSet.intersection(stringSet);
numberSet.intersection(numberMap);
numberSet.intersection(numberSetLike);
numberSet.difference([]);
numberSet.difference(new Set);
numberSet.difference(stringSet);
numberSet.difference(numberMap);
numberSet.difference(numberSetLike);
numberSet.symmetricDifference([]);
numberSet.symmetricDifference(new Set);
numberSet.symmetricDifference(stringSet);
numberSet.symmetricDifference(numberMap);
numberSet.symmetricDifference(numberSetLike);
numberSet.isSubsetOf([]);
numberSet.isSubsetOf(new Set);
numberSet.isSubsetOf(stringSet);
numberSet.isSubsetOf(numberMap);
numberSet.isSubsetOf(numberSetLike);
numberSet.isSupersetOf([]);
numberSet.isSupersetOf(new Set);
numberSet.isSupersetOf(stringSet);
numberSet.isSupersetOf(numberMap);
numberSet.isSupersetOf(numberSetLike);
numberSet.isDisjointFrom([]);
numberSet.isDisjointFrom(new Set);
numberSet.isDisjointFrom(stringSet);
numberSet.isDisjointFrom(numberMap);
numberSet.isDisjointFrom(numberSetLike);