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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
//// [checkSuperCallBeforeThisAccess.ts]
class A {
x = 1;
}
class C1 extends A {
constructor(n: number) {
let a1 = this; // Error
let a2 = this.x; // Error
let a3 = super.x; // Error
let a4 = () => this;
let a5 = () => this.x;
let a6 = () => super.x;
if (!!true) {
super();
let b1 = this;
let b2 = this.x;
let b3 = super.x;
}
else {
let c1 = this; // Error
let c2 = this.x; // Error
let c3 = super.x; // Error
}
if (!!true) {
switch (n) {
case 1:
super();
let d1 = this.x;
case 2:
let d2 = this.x; // Error
default:
super();
let d3 = this.x;
}
let d4 = this.x;
}
if (!!true) {
let e1 = { w: !!true ? super() : 0 };
let e2 = this.x; // Error
let e3 = { w: !!true ? super() : super() };
let e4 = this.x;
}
let f1 = this; // Error
let f2 = this.x; // Error
let f3 = super.x; // Error
}
}
// Repro from #38512
export class Foo {
constructor(value: number) {
}
}
export class BarCorrectlyFails extends Foo {
constructor(something: boolean) {
if (!something) {
const value = this.bar(); // Error
super(value);
}
else {
super(1337);
}
}
bar(): number { return 4; }
}
export class BarIncorrectlyWorks extends Foo {
constructor(something: boolean) {
if (something) {
super(1337);
}
else {
const value = this.bar(); // Error
super(value);
}
}
bar(): number { return 4; }
}
//// [checkSuperCallBeforeThisAccess.js]
class A {
constructor() {
this.x = 1;
}
}
class C1 extends A {
constructor(n) {
let a1 = this; // Error
let a2 = this.x; // Error
let a3 = super.x; // Error
let a4 = () => this;
let a5 = () => this.x;
let a6 = () => super.x;
if (!!true) {
super();
let b1 = this;
let b2 = this.x;
let b3 = super.x;
}
else {
let c1 = this; // Error
let c2 = this.x; // Error
let c3 = super.x; // Error
}
if (!!true) {
switch (n) {
case 1:
super();
let d1 = this.x;
case 2:
let d2 = this.x; // Error
default:
super();
let d3 = this.x;
}
let d4 = this.x;
}
if (!!true) {
let e1 = { w: !!true ? super() : 0 };
let e2 = this.x; // Error
let e3 = { w: !!true ? super() : super() };
let e4 = this.x;
}
let f1 = this; // Error
let f2 = this.x; // Error
let f3 = super.x; // Error
}
}
// Repro from #38512
export class Foo {
constructor(value) {
}
}
export class BarCorrectlyFails extends Foo {
constructor(something) {
if (!something) {
const value = this.bar(); // Error
super(value);
}
else {
super(1337);
}
}
bar() { return 4; }
}
export class BarIncorrectlyWorks extends Foo {
constructor(something) {
if (something) {
super(1337);
}
else {
const value = this.bar(); // Error
super(value);
}
}
bar() { return 4; }
}
|