TypeScript/tests/baselines/reference/intersectionTypeInference3.types
2018-05-03 14:18:50 -07:00

63 lines
2.8 KiB
Plaintext

=== tests/cases/conformance/types/intersection/intersectionTypeInference3.ts ===
// Repro from #19682
type Nominal<Kind extends string, Type> = Type & {
>Nominal : Nominal<Kind, Type>
>Kind : Kind
>Type : Type
>Type : Type
[Symbol.species]: Kind;
>[Symbol.species] : Kind
>Symbol.species : symbol
>Symbol : SymbolConstructor
>species : symbol
>Kind : Kind
};
type A = Nominal<'A', string>;
>A : Nominal<"A", string>
>Nominal : Nominal<Kind, Type>
declare const a: Set<A>;
>a : Set<Nominal<"A", string>>
>Set : Set<T>
>A : Nominal<"A", string>
declare const b: Set<A>;
>b : Set<Nominal<"A", string>>
>Set : Set<T>
>A : Nominal<"A", string>
const c1 = Array.from(a).concat(Array.from(b));
>c1 : Nominal<"A", string>[]
>Array.from(a).concat(Array.from(b)) : Nominal<"A", string>[]
>Array.from(a).concat : { (...items: ConcatArray<Nominal<"A", string>>[]): Nominal<"A", string>[]; (...items: (Nominal<"A", string> | ConcatArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; }
>Array.from(a) : Nominal<"A", string>[]
>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<Nominal<"A", string>>
>concat : { (...items: ConcatArray<Nominal<"A", string>>[]): Nominal<"A", string>[]; (...items: (Nominal<"A", string> | ConcatArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; }
>Array.from(b) : Nominal<"A", string>[]
>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<Nominal<"A", string>>
// Simpler repro
declare function from<T>(): T[];
>from : <T>() => T[]
>T : T
>T : T
const c2: ReadonlyArray<A> = from();
>c2 : ReadonlyArray<Nominal<"A", string>>
>ReadonlyArray : ReadonlyArray<T>
>A : Nominal<"A", string>
>from() : Nominal<"A", string>[]
>from : <T>() => T[]