Repository: TypeScript
Issue:  TypeScript does not infer the type correctly after two layer Mapped Types.
Labels: Needs Investigation

<!-- 🚨 STOP 🚨 𝗦𝗧𝗢𝗣 🚨 𝑺𝑻𝑶𝑷 🚨

Half of all issues filed here are duplicates, answered in the FAQ, or not appropriate for the bug tracker. Even if you think you've found a *bug*, please read the FAQ first, especially the Common "Bugs" That Aren't Bugs section!

Please help us by doing the following steps before logging an issue:
  * Search: https://github.com/Microsoft/TypeScript/search?type=Issues
  * Read the FAQ: https://github.com/Microsoft/TypeScript/wiki/FAQ

Please fill in the *entire* template below.
-->

<!--
Please try to reproduce the issue with the latest published version. It may have already been fixed.
For npm: `typescript@next`
This is also the 'Nightly' version in the playground: http://www.typescriptlang.org/play/?ts=Nightly
-->
**TypeScript Version:**  3.9.0-beta

<!-- Search terms you tried before logging this (so others can find this issue more easily) -->
**Search Terms:**

Lookup Types, Mapped Types

**Code**

This is Okay:

```ts
interface APIs {
  readonly getUserProfile: {
    readonly Parameter: {
      readonly id: string;
    };
    readonly Response: {
      '200': {
        readonly id: string;
        readonly name: string;
        readonly gender: boolean;
      };
    };
  };
}

export type ValueType<T extends object> = T[keyof T];

export type PropertyType<T extends object, K extends string> = K extends keyof T
  ? T[K]
  : never;

type MyFetch = {
  [operationId in keyof APIs]: (
    param: PropertyType<APIs[operationId], 'Parameter'>,
  ) => Promise<
    ValueType<PropertyType<APIs[operationId], 'Response'>>
  >;
};
```

And this is Error: *Type 'APIs[server][string]' is not assignable to type 'object'*
```ts

interface APIs {
  readonly server1: {
    readonly getUserProfile: {
      readonly Parameter: {
        readonly id: string;
      };
      readonly Response: {
        '200': {
          readonly id: string;
          readonly name: string;
          readonly gender: boolean;
        };
      };
    };
  };
}

export type ValueType<T extends object> = T[keyof T];

export type PropertyType<T extends object, K extends string> = K extends keyof T
  ? T[K]
  : never;

type MyFetch = {
  [server in keyof APIs]: {
    [operationId in keyof APIs[server]]: (
      param: PropertyType<APIs[server][operationId], 'Parameter'>,
    ) => Promise<
      ValueType<PropertyType<APIs[server][operationId], 'Response'>>
    >;
  };
};
```

And this is Ok
```ts
interface APIs {
  readonly server1: {
    readonly getUserProfile: {
      readonly Parameter: {
        readonly id: string;
      };
      readonly Response: {
        '200': {
          readonly id: string;
          readonly name: string;
          readonly gender: boolean;
        };
      };
    };
  };
}

export type ValueType<T extends object> = T[keyof T];

export type PropertyType<T extends object, K extends string> = K extends keyof T
  ? T[K]
  : never;

type MyFetch = {
  [server in keyof APIs]: {
    [operationId in keyof APIs[server]]: (
      param: PropertyType<{} & APIs[server][operationId], 'Parameter'>,
    ) => Promise<
      ValueType<{} & PropertyType<{} & APIs[server][operationId], 'Response'>>
    >;
  };
};
```
**Expected behavior:**

remove three `{} & ` and no error.
**Actual behavior:**

**Playground Link:** 

[Ok Playground Link 0](https://www.typescriptlang.org/v2/en/play?ts=3.9.0-beta#code/FASwdgLgpgTgZgQwMZQAQEEAKBJAzqgb2FVRigQBMB7MAGwE9UBzKCAVV1kxirhFqgAuQsRKly1Oo0wIYCALatYwomLFlKNBqhAVhuCDHBMA3KJIBfM2o2TtAJSi4ADjU4rzYgOQAmAAx+Xh5qNhJajLr6hsbWISS24ahgCkKoBkZgpp6hmlLMUGAUyqgARlRUAghgsWpWnnWWZhbAwFAAHq4wEKgQ9M5oAGoItACuUAAqfVAAPOOo7dCF+FQlAFZQSBAAfKgAvKjjANoA1lD0vAcAumatHVRdPVOo3FT9XfST-bPzbYsUy2sNhAADSoADSPz++HSxh2+whCwK-1Qp3OcAOogA-AdDmDLqJhGAoAA3WA3Xr9VAAWXoADFWEgABZ7EQkQ6vWAICAgGjYCg6MAos4XLB4S7CAAUnmcsgUwheb16nxmotw7LeXJ5YD5l1BXhkckU0BgXi2wNEAEo9jsXvIQJxpp4hqMJlNpgrYEq3ar1ZzubyKLrUF5HC43FBTVtRFsmiYgA)

[Error Playground Link](https://www.typescriptlang.org/v2/en/play?ts=3.9.0-beta#code/FASwdgLgpgTgZgQwMZQAQEEAKBJAzqgb2FVRigQBMB7MAGwE9VdYA3WARgC5DiTTzqdRgHMoEAKrMYmGFTghaUbkT58ylGg1SYEMBAFsxsZb1Ul1grSArdcEGOGEBuU3wC+Ls-w1DUAJShcAAcaZhMvEgByACYABljI8IjzAU1Ga1t7R09k70tGMAMlJiywZ1cvCzTUUTAKY1QAIyoqRQQwHK8PCtRu1T7elzdgYCgADxCYCFQIeiC0ADUEWgBXKAAVOagAHnXUceg6-CpGgCsoJAgAPlQAXlR1gG0Aayh6OQeAXRdRiaopmZbbSyeZTeibea7fZjQ4UY5nC4QAA0qAA0tDYfg7A4yjd7uiDlAjqhXu84A9eAB+B6PVGfXjcMBQNgwH6zeaoACy9AAYmIkAALO48EiPKQs1DgElvD5YPCfJKiqighAQEA0bAUSVgaVkjA4XBi1iwT4K1AACh6QV0Bm4MmVsFmEJ2csN4pNjwdejVGoonxRkR0ekM0BgkSuSNcAEo7jd7foQMxtj0lqsNlttvbQU6M66jTAWZ9PSqfWBNf7UJEAsFQlBw1dXFcct1ukA)

[Ok Playground Link](https://www.typescriptlang.org/v2/en/play?ts=3.9.0-beta&ssl=30&ssc=40&pln=30&pc=35#code/FASwdgLgpgTgZgQwMZQAQEEAKBJAzqgb2FVRigQBMB7MAGwE9VdYA3WARgC5DiTTzqdRgHMoEAKrMYmGFTghaUbkT58ylGg1SYEMBAFsxsZb1Ul1grSArdcEGOGEBuU3wC+Ls-w1DUAJShcAAcaZhMvEgByACYABljI8IjzAU1Ga1t7R09k70tGMAMlJiywZ1cvCzTUUTAKY1QAIyoqRQQwHK8PCtRu1T7elzdgYCgADxCYCFQIeiC0ADUEWgBXKAAVOagAHnXUceg6-CpGgCsoJAgAPlQAXlR1gG0Aayh6OQeAXRdRiaopmZbbSyeZTeibea7fZjQ4UY5nC4QAA0qAA0tDYfg7A4yjd7uiDlAjqhXu84A9eAB+B6PVGfXjcMBQNgwH6zeaoACy9AAYmIkAALO48EiPKQs1DgElvD5YPCfJKiqighAQEA0bAUSVgaVkjA4XBi1iwT4K1AACh6QV0Bm4MmVsFmEJ2BDcqAAZPq8EaYCzPo8HXo1RqKJ8UZEdHpDNAYJErkjXABKO43e36EDMbY9JarDZbbauj3AwNO-OFz1yw3ik0BlXBsCasOoSIBYKhKBxq6uK45brdIA)

**Related Issues:** <!-- Did you find other bugs that looked similar? -->

https://github.com/pirix-gh/ts-toolbelt/issues/107