// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`test.js 1`] = ` type CovArrayVerbose = Array; var b: CovArrayVerbose = []; var y: CovArrayVerbose = b; y[0] = ""; // error class NVerbose { x: CovArrayVerbose; foo(): CovArrayVerbose { return this.x; } } var nv: NVerbose = new NVerbose; nv.x = [0]; (nv.x[0]: string); // error (nv.foo()[0]: string); // error /* TODO: use existentials for non-verbose covariance? type CovArray = Array<*:X>; var c: CovArray = [0]; var z: CovArray = c; // error var d: CovArray = []; var w: CovArray = d; w[0] = ""; // error type P = CovArray; var p: P = []; (p[0]: number); // not an error! p[0] = ""; // error class M { x: CovArray; foo(): CovArray { return this.x; } bar(x: string) { this.foo()[0] = x; } // error } class N { x: CovArray; foo(): CovArray { return this.x; } bar(e: string) { this.foo()[0] = e; } // error qux(e: E) { this.foo()[0] = e; } } var n: N = new N; n.x = [0]; (n.x[0]: string); // error (n.foo()[0]: string); // not an error! */ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ type CovArrayVerbose = Array; var b: CovArrayVerbose = []; var y: CovArrayVerbose = b; y[0] = ""; // error class NVerbose { x: CovArrayVerbose; foo(): CovArrayVerbose { return this.x; } } var nv: NVerbose = new NVerbose(); nv.x = [0]; (nv.x[0]: string); // error (nv.foo()[0]: string); // error /* TODO: use existentials for non-verbose covariance? type CovArray = Array<*:X>; var c: CovArray = [0]; var z: CovArray = c; // error var d: CovArray = []; var w: CovArray = d; w[0] = ""; // error type P = CovArray; var p: P = []; (p[0]: number); // not an error! p[0] = ""; // error class M { x: CovArray; foo(): CovArray { return this.x; } bar(x: string) { this.foo()[0] = x; } // error } class N { x: CovArray; foo(): CovArray { return this.x; } bar(e: string) { this.foo()[0] = e; } // error qux(e: E) { this.foo()[0] = e; } } var n: N = new N; n.x = [0]; (n.x[0]: string); // error (n.foo()[0]: string); // not an error! */ `;