Accessing protected field in Typescript

I have a few classes.

class Money {
   protected amount: number
   public equals(object: Object): boolean {
       const money: Money = object as Money;
       return this.amount === **money.amount** //<- I want to write like this
   }
}
class Dollar extends Money {
   constructor(amount: number){
       super();
       this.amount = amount;
   }
}

and here is how you use it:

new Dollar(5).equals(new Dollars(5));

However, I am unable to access the `money.amount` in the Money class.

This prompted me to try the following solution:

class Money {
   protected amount: number;
   getAmount(): number {
       return this.amount;
   }
   public equals(object: Object): boolean {
       const money: Money = object as Money;
       return this.amount === money.getAmount(); // tried
   }
}

Alternatively, I considered removing the `protected` keyword within the Money class.

The solution works, but I don't find it ideal.

How can I address this issue similar to Java?

Answer №1

By utilizing the protected modifier, access to the amount property is restricted to internal instances of the Money class only, preventing accessibility on objects of the Money class.

When using object as Money, the object is interpreted as a public Money object rather than an internal one. It is advisable to first verify if object is indeed an instance of Money.

class Money {
    protected amount: number = 0;
    public equals(other: any): boolean {
        if (!(other instanceof Money)) return false; // not a Money derivative and therefore not equal
        return this.amount === other.amount; // "other" is now recognized as an instance of Money by the compiler/linter through process of elimination
    }
}
class Dollar extends Money {
    constructor(amount: number){
        super();
        this.amount = amount;
    }
}

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

I'm looking to send a response with data using Nest JS API and Postman. How can I accomplish this

As I work on setting up my server using Nest Js, I encountered an issue while trying to fetch data from Postman to test the API urls. Unfortunately, I keep receiving empty responses from the server or undefined values from the postman request. Below is a s ...

Updating the useState() function in React when the value changes can be done by utilizing the

I'm struggling to update the count value in my React project. Within my dynamic set, I aim to display the size of the set whenever it changes! My goal is to continuously update the count variable to match ratedSet.size whenever the set's size c ...

Creating a cucumber feature file from an Excel sheet or any other type of file: A step-by

I currently have an excel sheet containing various scenarios that I need to convert into a feature file. Can you assist me in accomplishing this task? Do you know of any plugins that can help streamline this process? Any guidance would be greatly apprecia ...

Angular mat-select is having difficulty displaying options correctly on mobile devices or devices with narrow widths

In my Angular project, I've encountered an issue with mat-select when viewing options on mobile or low-resolution screens. While the options are still displayed, the text is mysteriously missing. I attempted to set the max width of the mat-option, but ...

Transfer an object to $state.go

I'm having trouble solving this issue. Here's the state I am working with: var myState:ng.ui.IState = <ng.ui.IState> { url: '/new/{order.orderNumber}', controller: 'OrderController', controll ...

Encountering an issue while trying to load a file from an API due to difficulties in parsing it to

When trying to load an xlsx file from an API, I encountered an error because Angular automatically tries to parse the body as JSON. To resolve this issue, I found that specifying the response type directly in the request works: this.http.get(this.url + " ...

What is the best way to retrieve session data in both a server component and a client component using NextAuth and Next.js?

As I delve into the realm of Next.js and utilize NextAuth for authentication in my application, I've discovered that Next-auth handles the session and token management. My objective is to extract the email of the authenticated user from the data store ...

When trying to update a variable within the then() method of a Promise, the variable does not reflect

While the console.log inside the for loop successfully prints project with the correct updated attributes for both role and user within the proposer object, it seems that once outside of the loop, the changes are not retained. At that point, all I see is ...

Issue with rendering images retrieved from JSON data

Struggling with displaying images in my Ionic and Angular pokedex app. The JSON file data service pulls the image paths, but only displays the file path instead of the actual image. Any ideas on what might be causing this issue? Sample snippet from the JS ...

Distinguishing TypeScript between the source object and the spread object

I'm struggling with a riddle related to Typescript: const randomFn = (arg: Record<string, unknown>): string => 'kappa' export type Values = { key: string; }; const values: Values = { key: 'kappa' } const { ...spr ...

Exploring the capabilities of Web MIDI in the context of Angular

I am a beginner with Typescript and I am currently working on using Angular2 to develop a Web Midi application. However, I am facing some difficulties in understanding certain errors that I encounter. I believe that I should be placing the Midi functions w ...

The name 'Map' cannot be located. Is it necessary to alter your target library?

After running the command tsc app.ts, an error occurs showing: Error TS2583: 'Map' is not recognized. Should the target library be changed? Consider updating the lib compiler option to es2015 or newer. I want the code to compile without any issu ...

What is the reasoning behind triggering ValueChanges during initialization even when there are no changes detected?

I am working with a popup component that includes a mat-datepicker. When the user changes the date, I need to update this value in another control and ensure that the start and end controls are valid. However, due to a bug in the mat-date-range-input, I ...

When working with TypeScript, encountering an error involving an array containing an index signature

When attempting to change an object's type to a generic array using the as keyword, I encountered an error. interface TestType { action: TestGeneric<number>[] } type TestGeneric<T> = { [key: string]: T } const func = () => { ...

Encountering an issue: The type '{ children: Element; }' does not share any properties with type 'IntrinsicAttributes & CookieConsentProviderProps'

I recently updated my packages and now I'm encountering this error. Is there a way to resolve it without reverting back to the previous versions of the packages? I've come across similar errors reported by others, but none of the suggested solut ...

Acquire data on the type from the returned outcome of a function

Below is a function that I am working with in the TypeScript playground: function myf(): Record<string, string> { return { prop1: "a", prop2: "b" } } This function is pure and simply returns a dictionary value. My goal is to ext ...

Interacting with a Web Socket Connection While Editing Inline Content Causes Distractions. Using Angular 9 Material Table

Not exactly an error-related inquiry, but more about behaviors. In my Angular 9 setup using RxJS and Material, I have a table connected to a web socket for updates triggered by blur or change, depending on the column. This setup works well, updating the ta ...

Lerna: The Ultimate Guide to Installing External Packages Across Multiple Projects

We utilize Lerna for managing our mono-repo projects, and I am seeking the most effective method to install an external package in my projects while ensuring they all use the same version. Here is my project structure (my-Main-A and my my-Main-B both depe ...

Hover Effect for 3D Images

I recently came across an interesting 3D Hover Image Effect that I wanted to implement - https://codepen.io/kw7oe/pen/mPeepv. After going through various tutorials and guides, I decided to try styling a component with Materials UI and apply CSS in a differ ...

Using Angular 5 to auto-fill form fields with data retrieved from a MySQL database

I am a beginner with Angular 5 and facing an issue while trying to populate a form with data from a database. Currently, my form remains hidden and from the TypeScript side, it only displays null. PHP code: include ('conexion.php'); $id = $_GET ...