TypeScript getter setter convention
Java is a statically compiled language. In Java, if you publish a .jar library with a class
class Foo {
public int bar;
}
and later decide to introduce a logic around that field
class Foo {
private int _bar;
public int getBar() { return _bar - 1; }
public void setBar(int v) { _bar = v + 1; }
}
any code that uses your .jar will break and will have to be updated and re-compiled. This is why it's a big no-no in Java to expose raw public fields.
TypeScript is a superset of JavaScript which is a dynamic language. All linking is dynamic. You can safely release a library with a class
class Foo {
bar: number
}
If you later release an update
class Foo {
private _bar: number
get bar() { return this._bar - 1 }
set bar(v: number) { this._bar = v + 1 }
}
your library users won't notice.
Joshua
Updated on November 30, 2022Comments
-
Joshua over 1 year
What is the convention (standard) in TypeScript for class attributes?
In the angular 2 demo (The Heroes Tour from angular.io) all attributes are set to public :
export class Hero { id: number; name: string; }
So they can be instanciated both ways :
var hero: Hero = new Hero(); hero.id = 0; hero.name = "hero";
or
var hero2: Hero = {id : 0, name: "hero"};
Is there a Java style convention (like this) :
export class Hero { private id: number; private name: string; setId(id: number): Hero { this.id = id; return this; } setName(name: string): Hero { this.name = name; return this; } getId(): number { return this.id; } getName(): string { return this.name; } }
Declaration (exemple) :
var hero: Hero = new Hero(); hero.setId(0).setName('hero'); var hero2: Hero = new Hero().setId(0).setName('hero');
-
Laurent Schwitter about 6 yearsNobody forbids you from doing that but it's not the convention and it's overdeclarative and can get pretty ugly very quickly
-
Marty over 4 yearsThis approach actually answers the OP's question and is accurate with a reasonable caution, and is referenced in the TypeScript docs typescriptlang.org/docs/handbook/classes.html#accessors