class A { a } class B extends A { b } class C extends Array { c } declare var ara: A[]; declare var arb: B[]; declare var cra: C; declare var crb: C; declare var rra: ReadonlyArray; declare var rrb: ReadonlyArray; rra = ara; rrb = arb; // OK, Array is assignable to ReadonlyArray rra = arb; rrb = ara; // error: 'A' is not assignable to 'B' rra = cra; rra = crb; // OK, C is assignable to ReadonlyArray rrb = crb; rrb = cra; // error: 'A' is not assignable to 'B'