Bug description
Found via StackOverflow: https://stackoverflow.com/q/79232050/634824
TypeScript allows the this keyword to be used as a type.
AssemblyScript seems to recognize this syntax and compiles fine:
class X {
doSomething(): this {
return this;
}
}
However, in AssemblyScript, it always is treated as the class where this is used - which is not necessarily the type of the instance when the object is extended.
class Y extends X {
doSomethingElse(): string {
return "You made it!";
}
}
Steps to reproduce
With the above code,
console.log(new Y().doSomething().doSomethingElse());
fails to compile. The error is:
ERROR TS2339: Property 'doSomethingElse' does not exist on type 'assembly/index/X'.
:
12 │ console.log(new Y().doSomething().doSomethingElse());
│ ~~~~~~~~~~~~~~~
└─ in assembly/index.ts(12,35)
Essentially, y.doSomething() is returning a type X where it should return a type Y.
TypeScript tooling believes the value should be Y, but AssemblyScript thinks it's X.

Casting the value using <Y> or as Y works, but the point is that one may have full awareness of the original type when making the call.
AssemblyScript version
v0.27.32
Bug description
Found via StackOverflow: https://stackoverflow.com/q/79232050/634824
TypeScript allows the
thiskeyword to be used as a type.AssemblyScript seems to recognize this syntax and compiles fine:
However, in AssemblyScript, it always is treated as the class where
thisis used - which is not necessarily the type of the instance when the object is extended.Steps to reproduce
With the above code,
fails to compile. The error is:
Essentially,
y.doSomething()is returning a typeXwhere it should return a typeY.TypeScript tooling believes the value should be
Y, but AssemblyScript thinks it'sX.Casting the value using
<Y>oras Yworks, but the point is that one may have full awareness of the original type when making the call.AssemblyScript version
v0.27.32