=== tests/cases/compiler/mappedTypeNestedGenericInstantiation.ts ===
// Repro from #13346

interface Chainable<T> {
>Chainable : Chainable<T>
>T : T

  value(): T;
>value : () => T
>T : 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; }>
>U : U
>func : (v: T[keyof T]) => U
>v : T[keyof T]
>T : T
>T : T
>U : U
>Chainable : Chainable<T>
>k : k
>T : T
>U : U
}

declare function chain<T>(t: T): Chainable<T>;
>chain : <T>(t: T) => Chainable<T>
>T : T
>t : T
>T : T
>Chainable : 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; }

