Repository: TypeScript
Issue: `Array` should extend `ReadonlyArray`
Labels: Suggestion,Experimentation Needed

# Bug Report

<!--
  Please fill in each section completely. Thank you!
-->

it's annoying how to extend arrays you have to duplicate your property in two interfaces
```ts
declare global {
    interface Array<T> {
      foo(): T
    }
    interface ReadonlyArray<T> {
      foo(): T
    }
}
```
this seems to be because `Array` only structurally extends `ReadonlyArray`, so adding to `ReadonlyArray` means `Array` no longer extends it
```ts
//true
type ArrayExtendsReadonlyArray = Array<unknown> extends ReadonlyArray<unknown> ? true : false
```

i believe the fix is to add this to `Array`
```ts
interface Array<T> extends ReadonlyArray<T> {}
```

### 🔎 Search Terms
array extends readonlyarray
<!--
  What search terms did you use when trying to find an existing bug report?
  List them here so people in the future can find this one more easily.
-->

### 🕗 Version & Regression Information
4.5.0-dev.20211015
<!-- When did you start seeing this bug occur?

"Bugs" that have existed in TS for a long time are very likely to be FAQs; refer to
  https://github.com/Microsoft/TypeScript/wiki/FAQ#common-bugs-that-arent-bugs

If possible, please try testing the nightly version of TS to see if it's already been fixed.
For npm: `typescript@next`
This is also the 'Nightly' version in the playground: http://www.typescriptlang.org/play/?ts=Nightly

Note: The TypeScript Playground can be used to try older versions of TypeScript.

Please keep and fill in the line that best applies:
-->

### ⏯ Playground Link

<!--
  A link to a TypeScript Playground "Share" link which shows this behavior

  The TypeScript Workbench can be used for more complex setups, try
  https://www.typescriptlang.org/dev/bug-workbench/

  As a last resort, you can link to a repo, but these will be slower for us to investigate.
-->
[Playground link with relevant code](https://www.typescriptlang.org/play?ts=4.5.0-dev.20211015#code/JYOwLgpgTgZghgYwgAgEoTgEwPYgDYCeAglFHAQDwAqAfMgN4CwAUMsjNtgBQCUAXMiosAvixYB6cWCgBXCABpkAIxlhkAZwAW2GXkzIoEMDKgh2cPOpRKICODKvISZAshDZkeXAHNoyCAAekCCY6mgYOPjEpOQsYAQADijO5ACiQRAh6uhYuIQprgC8TjGUMiAA1u4A7iB0gcGh4blRBRTlVdi1dAD8yNJyyALwlhBizJi2eHCGyAi46mozLgJtHTV145LQUNhQAgAKu0lQ8cgA5BzY58g4EGHuaoHAi8i4-Yko5+tdIADaAF1zgA6LgAJgAzBCAJw8FjLcjAq68LbiFRqcrzAC2WMyYFA3n6mhenlAKGqwDweHYwACyGAYD4EnE9PA0HgSBKLmo9QyWWakXypR5DGEQA)

### 💻 Code

<!-- Please post the relevant code sample here as well-->
```ts
interface ReadonlyArray<T> {
  foo(): T
}

//this returns true, but should return false because Array no longer extends ReadonlyArray
type ArrayExtendsReadonlyArray = Array<unknown> extends ReadonlyArray<unknown> ? true : false

declare const array: Array<unknown>

//error: Property 'foo' does not exist on type 'unknown[]'.(2339)
array.foo()

//but uncommenting this line will fix it:
// interface Array<T> extends ReadonlyArray<T> {}
```

### 🙁 Actual behavior
- have to add to both `Array` and `ReadonlyArray`, resulting in duplicate code
- `Array<unknown> extends ReadonlyArray<unknown> ? true : false` resolves to `true` even after adding members to `ReadonlyArray` that `Array` doesn't have
<!-- What happened, and why it was wrong -->

### 🙂 Expected behavior
`Array` should explicitly extend `ReadonlyArray`
<!-- What you expected to happen instead, and why -->