1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
=== tests/cases/compiler/mappedTypeNestedGenericInstantiation.ts ===
// Repro from #13346
interface Chainable<T> {
value(): T;
>value : () => T
mapValues<U>(func: (v: T[keyof T]) => U): Chainable<{[k in keyof T]: U}>;
>mapValues : <U>(func: (v: T[keyof T]) => U) => Chainable<{ [k in keyof T]: U; }>
>func : (v: T[keyof T]) => U
>v : T[keyof T]
}
declare function chain<T>(t: T): Chainable<T>;
>chain : <T>(t: T) => Chainable<T>
>t : T
const square = (x: number) => x * x;
>square : (x: number) => number
>(x: number) => x * x : (x: number) => number
>x : number
>x * x : number
>x : number
>x : number
const v = chain({a: 1, b: 2}).mapValues(square).value();
>v : { a: number; b: number; }
>chain({a: 1, b: 2}).mapValues(square).value() : { a: number; b: number; }
>chain({a: 1, b: 2}).mapValues(square).value : () => { a: number; b: number; }
>chain({a: 1, b: 2}).mapValues(square) : Chainable<{ a: number; b: number; }>
>chain({a: 1, b: 2}).mapValues : <U>(func: (v: number) => U) => Chainable<{ a: U; b: U; }>
>chain({a: 1, b: 2}) : Chainable<{ a: number; b: number; }>
>chain : <T>(t: T) => Chainable<T>
>{a: 1, b: 2} : { a: number; b: number; }
>a : number
>1 : 1
>b : number
>2 : 2
>mapValues : <U>(func: (v: number) => U) => Chainable<{ a: U; b: U; }>
>square : (x: number) => number
>value : () => { a: number; b: number; }
|