Retrieve properties from an object that correspond to the class definition in Typescript

Hey there, I have an object structured like this:

let o = {"foo":"blah", "blah": "foo", "foo2":"blah2"}

In addition, my class is defined as follows:

class Foo {
 constructor(public foo: string, blah: string) {}
}

I am curious if there is a way to instantiate the class `Foo` using the fields `foo` and `blah` from object `o` (excluding `foo2`). While I could manually write functions for this task, I am wondering if there is an automatic method available?

Answer №1

In my opinion, a good approach would be something along these lines:

type BarBaz = { bar: string, baz: string }

let obj = { "bar": "baz", "baz": "bar", "bar2": "baz2" } as BarBaz

class Bar {
  private bar: string
  constructor({bar, baz}: BarBaz) {
    this.bar = bar;
  }
}

This code snippet demonstrates the concept of object destructuring, utilizing individual fields with their respective type information preserved through the use of the BarBaz type declaration.

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

Testing React Hook Form always returns false for the "isValid" property

When creating a registration modal screen, I encountered an issue with the isValid value when submitting the form. In my local environment (launched by npm start), the isValid value functions correctly without any issues. However, during unit testing us ...

I keep receiving multiple header errors from ExpressJS even though I am positive that I am only sending a single header

Can someone please help with the issue I'm facing in the code below: router.put("/:_id", async (req: Request, res: Response) => { try { // Create the updated artist variable const artist: IArtist = req.body; const updatedArt ...

Having trouble implementing types with typescript in Vue-toastification for vuejs 3

Having trouble incorporating vue-toast-notification into my vue 3 project. The issue seems to be with vue Augmenting Types. I've tried other solutions without success, encountering the following error: TS2339: Property '$toast' does not exis ...

Unexpected behavior in Typescript validation of function return object type

After some investigation, I came to the realization that TypeScript does not validate my return types as anticipated when using the const myFn: () => MyObjType syntax. I ran some tests on the TypeScript playground and examined the code: type MyObj = { ...

How can a fixed type value be assigned to a portion of a type that is constrained by generics?

Experience a new aspect of Ids with my basic interface: interface Identifiable { id?: number; } Behold, a universal function that transforms record objects into entities with ids: function transformRowToObject<T extends Identifiable>(row: { id: ...

Launching a new tab with a specific URL using React

I'm attempting to create a function that opens a new tab with the URL stored in item.url. The issue is, the item.url property is provided by the client, not by me. Therefore, I can't guarantee whether it begins with https:// or http://. For insta ...

When multiple input fields with an iterative design are using the same onChange() function, the specific event.target.values for each input

I'm in the process of developing a dynamic select button that adjusts based on the information entered into the iterative input fields I've set up. These input fields all utilize the same onChange() function. for (let i = 0; i < selectCount; i ...

Issue encountered: Nuxt 3 fails to locate the useRoute import

Recently, I updated to the latest version of Nuxt and encountered an issue with the useRoute method. Even though it works, I keep getting a "Cannot Find name useRoute" error message. Can anyone help me figure out what might be missing? <script lang=&quo ...

Ways to determine if a date matches today's date within a component template

I am currently displaying a list of news articles on the webpage and I want to show the word "Today" if the news article's date is equal to today's date. Otherwise, I want to display the full date on the page. Is there a way to compare the news.D ...

Executing a designated assessment in Protractor

Is there a way to run a specific test scenario in my Angular app? I recently added a new feature in Protractor, created the necessary page and steps, but I already have other features implemented. I am wondering if it is possible to solely test the new f ...

Embed the div within images of varying widths

I need help positioning a div in the bottom right corner of all images, regardless of their width. The issue I am facing is that when an image takes up 100% width, the div ends up in the center. How can I ensure the div stays in the lower right corner eve ...

The field 'token' is not found in the PropsWithChildren<WithUrqlProps> type but it is mandatory in the type '{ token: string; }'

Encountering an error at (ChangePassword) in the export default withUrqlClient(createUrqlClient)(ChangePassword): The argument of type 'FunctionComponent<{ token: string; }> & { getInitialProps?(context: NextPageContext): { token: string; } | ...

Guide to importing an ES module in Node.js without specifying a file extension

There's a common belief that when importing ES modules, you should always include a file extension. However, I stumbled upon certain Node projects that seem to import ES modules without an extension, as seen in this particular example. This has left ...

Is there a way to toggle or collapse a table row with a unique identifier using Angular and Bootstrap?

Currently handling Angular and Bootstrap in my work, but facing challenges with table manipulation and collapsing rows. I fetch data from a database and showcase it in a dynamically generated table using *ngFor and two rows within an ng-container. My goal ...

What is a way to execute a series of requests using rxjs similar to forkJoin and combineLatest, without needing to wait for all requests to finish before viewing the results?

Consider you have a list of web addresses: urls: string[] You create a set of requests (in this instance, utilizing Angular's HTTPClient.get which gives back an Observable) const requests = urls.map((url, index) => this.http.get<Film>(url) ...

Automapper for AngularJS to format results retrieved from a RESTful service

When using the $resource service for data access from a restful service, I encounter a small challenge. The JSON data retrieved is in the following format: { "name_surname": "john_smith", "years_of_employment": "10" } However, I would like to map ...

Displaying a list in Angular view using various object properties

A JSON object has been provided to me with the following structure: header: { first: { title: { name: "Test } }, second: { title: { name: "Test 2" }, ...

Flow error: Unable to access the value of this.props.width as the property width is not defined in T

In my React Native project, I am utilizing Flow for type checking. For more information, visit: I currently have two files named SvgRenderer.js and Cartoon.js where: Cartoon extends SvgRenderer Below is the source code for both of these files: SvgRend ...

retrieve the state property from NavLink

I am encountering an issue with passing objects through components in my project. Specifically, I have a chat object within a component that defines a NavLink. When a user clicks on the ChatsElement, which is a link, the page navigates to the URL /friends/ ...

Running the nestjs build command is impossible without the existence of the node_modules folder

Currently, I am in the process of creating a Nestjs micro-service and everything is going smoothly. To run the build found within the dist folder, I use the command below: node dist/main.js However, I encountered a problem where this command does not exec ...