The current ESNext contains a proposal for private members; for example:
class Person {
#firstName;
#lastName;
constructor(firstName, lastName) {
this.#firstName = firstName;
this.#lastName = lastName;
}
toString() {
return `${this.#firstName} ${this.#lastName}`;
}
}
const person = new Person("John", "Smith");
const firstName = person.firstName; // ERROR: Property 'firstName' does not exist on type 'Person'.
const fullName = person.toString(); // John Smith
TypeScript has supported public, protected and private members (IIRC) since the very beginning, although they are erased since there is no JavaScript equivalent.
What I want to know is, whether TypeScript can be configured (current, on roadmap, or being discussed) to support mapping private to ESNext private members; for example:
class Person {
constructor(private firstName: string = "", private lastName: string = "") {
}
toString() {
return `${this.firstName} ${this.lastName}`;
}
}
Compiled (Target = ESNext)
class Person {
#firstName;
#lastName;
constructor(firstName = "", lastName = "") {
this.#firstName = firstName;
this.#lastName = lastName;
}
toString() {
return `${this.#firstName} ${this.#lastName}`;
}
}
Compiled (Target <= ES2021)
"use strict";
class Person {
constructor(firstName = "", lastName = "") {
this.firstName = firstName;
this.lastName = lastName;
}
toString() {
return `${this.firstName} ${this.lastName}`;
}
}