← Back to libraryQuestion 221 of 468
🔷TypeScriptIntermediate

Classes and Access Modifiers

📌 Definition:

TypeScript adds access modifiers (public, private, protected, readonly) and parameter properties to classes, improving encapsulation for Page Objects and framework base classes.

📖 Detailed Explanation:

By default members are public. private restricts access to the class itself; protected allows the class and subclasses; readonly prevents reassignment after initialization. Parameter properties are a shorthand: constructor(private driver: Driver) declares AND assigns this.driver in one line. TypeScript also supports abstract classes/methods (a base that must be implemented), implements for interfaces, and static members. Note private is enforced by the COMPILER (soft privacy); JavaScript's #private fields are hard-private at runtime. These features make Page Object and framework hierarchies clean and safe.

🔑 Key Points:
  • public (default), private, protected, readonly modifiers
  • Parameter properties: constructor(private x: T) declares + assigns
  • abstract classes/methods; implements interfaces; static members
  • TS private is compile-time; #field is runtime-private
🌍 Real-World Example:

A base Page Object: class BasePage { constructor(protected page: Page) {} } lets subclasses use this.page while keeping it hidden from test code, encapsulating the driver.

🎯 Scenario-Based Interview Question:

Two developers argue whether TypeScript's private truly hides a field at runtime. Who's right?