f1a2e41a8a
This was we don't get noisy baselines just because a different phase of the compiler reported the diagnostic. This helps with Yui's refactoring work to move grammar checks into the type checker.
170 lines
No EOL
4.1 KiB
Text
170 lines
No EOL
4.1 KiB
Text
tests/cases/compiler/es6ClassTest2.ts(17,1): error TS2304: Cannot find name 'console'.
|
|
tests/cases/compiler/es6ClassTest2.ts(30,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
|
|
tests/cases/compiler/es6ClassTest2.ts(35,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
|
|
|
|
|
|
==== tests/cases/compiler/es6ClassTest2.ts (3 errors) ====
|
|
class BasicMonster {
|
|
constructor(public name: string, public health: number) {
|
|
|
|
}
|
|
|
|
attack(target) {
|
|
// WScript.Echo("Attacks " + target);
|
|
}
|
|
|
|
isAlive = true;
|
|
}
|
|
|
|
var m1 = new BasicMonster("1", 100);
|
|
var m2 = new BasicMonster("2", 100);
|
|
m1.attack(m2);
|
|
m1.health = 0;
|
|
console.log((<any>m5.isAlive).toString());
|
|
~~~~~~~
|
|
!!! error TS2304: Cannot find name 'console'.
|
|
|
|
class GetSetMonster {
|
|
constructor(public name: string, private _health: number) {
|
|
|
|
}
|
|
|
|
attack(target) {
|
|
// WScript.Echo("Attacks " + target);
|
|
}
|
|
// The contextual keyword "get" followed by an identifier and
|
|
// a curly body defines a getter in the same way that "get"
|
|
// defines one in an object literal.
|
|
get isAlive() {
|
|
~~~~~~~
|
|
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
|
|
return this._health > 0;
|
|
}
|
|
|
|
// Likewise, "set" can be used to define setters.
|
|
set health(value: number) {
|
|
~~~~~~
|
|
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
|
|
if (value < 0) {
|
|
throw new Error('Health must be non-negative.')
|
|
}
|
|
this._health = value
|
|
}
|
|
}
|
|
|
|
var m3 = new BasicMonster("1", 100);
|
|
var m4 = new BasicMonster("2", 100);
|
|
m3.attack(m4);
|
|
m3.health = 0;
|
|
var x = (<any>m5.isAlive).toString()
|
|
|
|
class OverloadedMonster {
|
|
constructor(name: string);
|
|
constructor(public name: string, public health?: number) {
|
|
|
|
}
|
|
|
|
attack();
|
|
attack(a: any);
|
|
attack(target?) {
|
|
//WScript.Echo("Attacks " + target);
|
|
}
|
|
|
|
isAlive = true;
|
|
}
|
|
|
|
var m5 = new OverloadedMonster("1");
|
|
var m6 = new OverloadedMonster("2");
|
|
m5.attack(m6);
|
|
m5.health = 0;
|
|
var y = (<any>m5.isAlive).toString()
|
|
|
|
class SplatMonster {
|
|
constructor(...args: string[]) { }
|
|
roar(name: string, ...args: number[]) { }
|
|
}
|
|
|
|
|
|
function foo() { return true; }
|
|
class PrototypeMonster {
|
|
age: number = 1;
|
|
name: string;
|
|
b = foo();
|
|
}
|
|
|
|
class SuperParent {
|
|
constructor(a: number) {
|
|
|
|
}
|
|
|
|
b(b: string) {
|
|
|
|
}
|
|
|
|
c() {
|
|
|
|
}
|
|
}
|
|
|
|
class SuperChild extends SuperParent {
|
|
constructor() {
|
|
super(1);
|
|
}
|
|
|
|
b() {
|
|
super.b('str');
|
|
}
|
|
|
|
c() {
|
|
super.c();
|
|
}
|
|
}
|
|
|
|
class Statics {
|
|
static foo = 1;
|
|
static bar: string;
|
|
|
|
static baz() {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
var stat = new Statics();
|
|
|
|
interface IFoo {
|
|
x: number;
|
|
z: string;
|
|
}
|
|
|
|
class ImplementsInterface implements IFoo {
|
|
public x: number;
|
|
public z: string;
|
|
constructor() {
|
|
this.x = 1;
|
|
this.z = "foo";
|
|
}
|
|
}
|
|
|
|
class Visibility {
|
|
public foo() { }
|
|
private bar() { }
|
|
private x: number;
|
|
public y: number;
|
|
public z: number;
|
|
constructor() {
|
|
this.x = 1;
|
|
this.y = 2;
|
|
}
|
|
}
|
|
|
|
class BaseClassWithConstructor {
|
|
constructor(public x: number, public s: string) { }
|
|
}
|
|
|
|
// used to test codegen
|
|
class ChildClassWithoutConstructor extends BaseClassWithConstructor { }
|
|
|
|
|
|
var ccwc = new ChildClassWithoutConstructor(1, "s");
|
|
|
|
|