Repository: TypeScript
Issue: Inherited interface functions cause compile error when interface extensions are reordered.
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.8.3

<!-- Search terms you tried before logging this (so others can find this issue more easily) -->
**Search Terms:**
- Order sensitive Interface Extension
- TS2551

I have two interfaces, one providing the function `toJSON()`, the other `toJSONLD()`.  I then make an interface that inherits from both of these.  Depending on the order in which I place these interfaces, `toJSON()` and `toJSONLD()` get detected by intellisense and recognized by the type system, yet are marked as not found by the compiler.  Additionally, minor changes to the code (like changing the generic parameter of `toJSON`) also cause the function to once again be detected properly.

This playground snippet has two interfaces: `ThingEventBroken` and `ThingEventFixed`.  They are identical, and only differ in the order in which I specified the inheriting interfaces.
ThingEventBroken throws compile errors when trying to use the two functions, while ThingEventFixed handles them properly.

Additionally, `ThingEventLobotomized` uses the same interface order as `ThingEventBroken`, but uses `any` for the generic parameter to `JSONAble`.  The issue goes away in this case.

**Code**

[Playground snippet](https://www.typescriptlang.org/play/#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgSRTRxgQiQEF11oATTJXOAbzgF8AoD0SWOGAJ5g8AKQDKAeQByAGQAicALxwASsGx0APAGcYUZAHMANHAYCAfAG4uAegBUdjnDtw5wdMmDbTSOBABGAFbq8NiYYJj+ADZ4EOhwUMAwAK5QSIZOLphwgdrkALRRtAnAYInawCiYpOR+8QgwFVHoAHSZNtzg0PDIqBg4opKychTReMxOcPaOcLMuailp3tm5BUUlZV6VMNVkvnH8ABaxQSGTzoi+PAy0wMU0UAC2bbPOHbMwEOLS8gAUAJQALjg32G1k4XB43UufSwTFBoximgAKkofBYWJNPqCAcDkeDIV0+IJhHAxGEYlA0ckkLcPEg7nAAD5wJDJKJRZlwfwQCAxBhc3T6JAGLlsx7+NDWKHEoR4ZFfIYo8xo1GgVC07zkzCUyYAfjgyMmeLg6sqtG8FCgUEwAk0yHQaDgAFVzPrDYrpFabXbXcbDaaQBqLXAAGI07A1JDuhkANzQ-oVoIkp0jmgACghsABrFEmUEAaWAAm0yvMVk6vB6RH6TCTQ29tuVgeDlutTfr0jLLE4MvgJPlnqkKeCaeRKuUE1mAG0C5c4NniwdkQBdPFDlGzlcVtjSon9uUgoZFkvNyeTafp+eLgTLteGy8rlvmrUUp0Gq-AuNSjhsac3u9rEJKsYTQOF5UOQwAFF4xQAAhKAIEXaNXmfTUCBrEg9ioB56EYYAjHOI8vTGFEN2RSCRRg7YEKQypy0I1DQXkRFxiI1BdDkapMC-ZIJR-VCIQ0JBdG5RDkOolA8UogxJJgWjkLRNkOVMZYkAEawbBsfhvGwKJMAQR5vGxIZEG8JAIHgOlPGKWp-HEyo5JMAQkjMuBrIZYpkGIqRWI4ey6KQOSWhM6QAU07TGjgPSDKM-ghzciyrPcGy-F8CjoNg+SHKQFo8o4AdVCSVIkAkdAkzyXxlAWErkTlFEZLkhTKmnAAiUKpFa7cOC0uA8paFz4AAdzwbRkmwXBtG0dB2QEEo9AQYB4y8qKB36jhhNE7FKuBGq0jKiramUZTOUwNSNJ67S8p8YoYGOfhD10BAVMSDQDHSAAvLwjjwMoIGEWBFu0NptvIEKvBgLidlsSLdP0wzjKHeREss9yUs8tKxMCpy4EGtyPMZbzmJGMZ-Jy4KOr+f4gN6jLvF6MCBjchBbhQLMdXiw1Gqy5qkEI3rcdcka4G0IbwmEW77roJ0DmJyIYhuny-L7UDawgzLtlDBAQDuIizXQwg+iw8gcLoBhcEY15idYy3ZgRUjOykBqNfgnLy0xVCOMh7jeP4qACQ28hRI8HXaDk6SXZgLXQ6U9lTvOiK4DgubRfFwwfr8KBbipA47rwBm1e0EweTuy7Zhmxgo2WRJWQgIaSjez7dZDu4KaHcKOBbsOspCpG5A7suAHU8DCXwdTyOAQ8QHp4mF3R-rgZJtHTvO4AMSo0CzOAIhtR4kidImG1JlWC-ArnI5kAJLIgR4EC+2g9aDF8MKNyNsOoM38NtpWxm-63SdQlOV4XsoY8VZHxSU-tfxcE2vAKIV9Pi33vuHc+VEsqXxLjfO+jJjpx1UuiROg8GiHAgMkfs9114Mn0NgbemBd77ygCYJaaABB3XTkNaA2ZljeB4CEXW8DMFINbj3DqHcBHXyEd3bYvdibhSAA)

**Expected behavior:**

Functions provided by interface extension should be present regardless of order.

**Actual behavior:**

Changing the order of the interfaces results in `toJSON()` and `toJSONLD()` not being recognized by the compiler, while still being recognized by the type system.