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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
=== tests/cases/compiler/arrayOfSubtypeIsAssignableToReadonlyArray.ts ===
class A { a }
>A : A
>a : any
class B extends A { b }
>B : B
>A : A
>b : any
class C<T> extends Array<T> { c }
>C : C<T>
>Array : T[]
>c : any
declare var ara: A[];
>ara : A[]
declare var arb: B[];
>arb : B[]
declare var cra: C<A>;
>cra : C<A>
declare var crb: C<B>;
>crb : C<B>
declare var rra: ReadonlyArray<A>;
>rra : ReadonlyArray<A>
declare var rrb: ReadonlyArray<B>;
>rrb : ReadonlyArray<B>
rra = ara;
>rra = ara : A[]
>rra : ReadonlyArray<A>
>ara : A[]
rrb = arb; // OK, Array<B> is assignable to ReadonlyArray<A>
>rrb = arb : B[]
>rrb : ReadonlyArray<B>
>arb : B[]
rra = arb;
>rra = arb : B[]
>rra : ReadonlyArray<A>
>arb : B[]
rrb = ara; // error: 'A' is not assignable to 'B'
>rrb = ara : A[]
>rrb : ReadonlyArray<B>
>ara : A[]
rra = cra;
>rra = cra : C<A>
>rra : ReadonlyArray<A>
>cra : C<A>
rra = crb; // OK, C<B> is assignable to ReadonlyArray<A>
>rra = crb : C<B>
>rra : ReadonlyArray<A>
>crb : C<B>
rrb = crb;
>rrb = crb : C<B>
>rrb : ReadonlyArray<B>
>crb : C<B>
rrb = cra; // error: 'A' is not assignable to 'B'
>rrb = cra : C<A>
>rrb : ReadonlyArray<B>
>cra : C<A>
|