87d10eb055
* Eliminate well-known symbols in the checker: 2021 edition * Actually update the lib text to say unique symbol, too (this is unneeded with compat code in place, but this makes goto-def make more sense) * Add test showing mismatched symbol constructor type interop * Add more test cases for some other related issues this fixes * Revert computed name change * Style comments
50 lines
2.1 KiB
Plaintext
50 lines
2.1 KiB
Plaintext
=== tests/cases/conformance/types/intersection/intersectionTypeInference3.ts ===
|
|
// Repro from #19682
|
|
|
|
type Nominal<Kind extends string, Type> = Type & {
|
|
>Nominal : Nominal<Kind, Type>
|
|
|
|
[Symbol.species]: Kind;
|
|
>[Symbol.species] : Kind
|
|
>Symbol.species : unique symbol
|
|
>Symbol : SymbolConstructor
|
|
>species : unique symbol
|
|
|
|
};
|
|
|
|
type A = Nominal<'A', string>;
|
|
>A : A
|
|
|
|
declare const a: Set<A>;
|
|
>a : Set<A>
|
|
|
|
declare const b: Set<A>;
|
|
>b : Set<A>
|
|
|
|
const c1 = Array.from(a).concat(Array.from(b));
|
|
>c1 : A[]
|
|
>Array.from(a).concat(Array.from(b)) : A[]
|
|
>Array.from(a).concat : { (...items: ConcatArray<A>[]): A[]; (...items: (A | ConcatArray<A>)[]): A[]; }
|
|
>Array.from(a) : A[]
|
|
>Array.from : { <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
|
|
>Array : ArrayConstructor
|
|
>from : { <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
|
|
>a : Set<A>
|
|
>concat : { (...items: ConcatArray<A>[]): A[]; (...items: (A | ConcatArray<A>)[]): A[]; }
|
|
>Array.from(b) : A[]
|
|
>Array.from : { <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
|
|
>Array : ArrayConstructor
|
|
>from : { <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
|
|
>b : Set<A>
|
|
|
|
// Simpler repro
|
|
|
|
declare function from<T>(): T[];
|
|
>from : <T>() => T[]
|
|
|
|
const c2: ReadonlyArray<A> = from();
|
|
>c2 : readonly A[]
|
|
>from() : A[]
|
|
>from : <T>() => T[]
|
|
|