Chris Benseler Chris Benseler - 2 months ago 16
TypeScript Question

TypeScript: use private or public in constructor

I'm new to TypeScript world, and I've seen examples with this to deal with injected objects and set it to a property of the component (this.anything)

First with public and setting by hand to this.nav

export class XPTO {
constructor(public nav: NavController) {
this.nav = nav;
}
}


and this, with private

export class XPTO {
constructor(private nav: NavController) {
//this.nav is nav?
}
}


in both cases after construct the object this.nav is a NavController object.
What are the differences of both implementations? Or this is the same when compiled to plain javascript?

Answer

Actually in your first example the explicit assignment is not needed at all:

export class XPTO {
   constructor(public nav: NavController) {
       // This line is not required.
       // this.nav = nav;
       this.someFunction();
   }
   someFunction(){
       console.log(this.nav); // Prints out the NavController.
   }
}

Whenever you secify public or private on a constructor parameter a corresponding public/private variable is created on the class and filled with the value of the parameter.

So really, the only difference of the two code samples is that one is private and the other one is public.

The resulting javascript will be the same, but the compiler will throw an error, if you are trying to access private variables in your code.