class Animal { static ONE: i32 = 1; static add(a: i32, b: i32): i32 { return a + b + Animal.ONE; } static sub(a: T, b: T): T { return a - b + Animal.ONE; } // tsc does not allow this one: i32 = 1; // 4 two: i16 = 2; // 6 three: i8 = 3; // 7 instanceAdd(a: i32, b: i32): i32 { return a + b + Animal.ONE; } instanceSub(a: T, b: T): T { return a - b + Animal.ONE; } // tsc does not allow this } assert(sizeof>() == 7); Animal.ONE; Animal.add(1,2); Animal.sub(1, 2); export function test(animal: Animal): Animal { animal.instanceAdd(1, 2); animal.instanceSub(1, 2); animal.one; animal.two; animal.three; animal.one = 0 + 1; animal.two = 1 + 1; animal.three = 1 + 1 + 1; var ptr = changetype(animal); var cls = changetype>(ptr); return cls; }