Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeScript Unexpected token, A constructor, method, accessor or property was expected

Just trying to write a function within a class using typescript.

class Test 
{
    function add(x: number, y: number): number {
        return x + y;
    }
}

This results in the following error:

TypeScript Unexpected token, A constructor, method, accessor or property was expected.

I copied the example from: https://www.typescriptlang.org/docs/handbook/functions.html

Am I missing something? I'm confused!

like image 676
Guido Kleijer Avatar asked Mar 28 '17 13:03

Guido Kleijer


3 Answers

You shouldn't use the function keyword in a Typescript class definition. Try this instead:

class Test {      add(x: number, y: number): number {         return x + y;     } } 
like image 153
Mike Chamberlain Avatar answered Sep 24 '22 23:09

Mike Chamberlain


TypeScript does not allow function declarations as class members; it has a slightly different syntax for that...

class Test  {     // This will bind the add method to Test.prototype     add(x: number, y: number): number      {         return x + y;     }      // This will create a closure based method within the Test class     add2 = (x: number, y: number) => {         return x + y;     } } 
like image 32
Matthew Layton Avatar answered Sep 23 '22 23:09

Matthew Layton


The same error is also thrown when you try to access a property outside a life-cycle hook. You need to access them in a life-cycle hook or constructor like:

class Test {

  x: number;
  y: number;

  add(x: number, y: number): number {
    this.x = x;
    this.y = y;
    return this.x + this.y;
  }
}

...
export class Component implements OnInit {

  test: Test = new Test();
  test.x = 0; // NOK, will throw: Unexpected token, A constructor... error

  constructor() { 
    test.x = 0; // OK
  }

  ngOnInit(): void {
    test.x = 0; // OK
  }
}
like image 33
Kurt Van den Branden Avatar answered Sep 25 '22 23:09

Kurt Van den Branden