What is the best way to assign values to all properties of a TypeScript class?

I am working on a class that has private properties:

class A implements IA {
   private id: number;
   private name: string;

   constructor(obj: IA) {
      // Need to assign properties from obj here
   }
}

My goal is to pass an object of type IA with initialized values when creating an instance of A, and only update the properties in the class that I provide.

For example: new A({id: 1}) or new A({id: 1, name: "O"})

Can anyone guide me on how to achieve this in TypeScript?

Answer №1

To easily achieve this, you can utilize the Object.assign method. This function will only duplicate the specified fields provided in the constructor parameter.

interface IA{
    id? : number;
    name? : string
}

class A {
    private id: number;
    private name: string;

    constructor(obj: IA) {
        Object.assign(this, obj)
    }
}

Please note: I have omitted the 'implements' keyword from the class as private fields cannot be used to implement an interface.

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

Encountered issues retrieving data using a combination of Docker, MySQL, Express, and TypeScript

After successfully creating a todo-app using Node.js, TypeScript, and MySQL, I encountered an error when trying to run the app on a Docker Container. Failed to load resource: net::ERR_NAME_NOT_RESOLVED TypeError: Failed to fetch at getTodos (ListTodo.t ...

Definition of union types in JavaScript using Typescript

Looking for assistance in creating a d.ts file for the union-type library found at https://github.com/paldepind/union-type Consider the following union type: let Maybe = Type({ Nothing: [] , Just: [Number] }) I am interested in setting up compi ...

Creating a declaration of an array containing key value pairs in Typescript

Feeling lost with the syntax provided below: constructor(controls: {[key: string]: AbstractControl}, optionals?: {[key: string]: boolean}, validator?: ValidatorFn, asyncValidator?: AsyncValidatorFn) I'm curious about the type of the controls (first ...

Developing a type specifically for this function to operate on tuples of varying lengths

I am currently developing a parser combinator library and I am in need of creating a map function that can take N parsers in a tuple, along with a function that operates on those N arguments and returns a parser that parses into the return type specified b ...

Utilizing dynamic arguments in TypeScript to recycle types

Can I accomplish this with TypeScript? Here is the source code I currently have: interface FormStore<T> { type: T; } interface Form<T> extends FormStore<T> { email: T; phone: T; password: T; } interface FormState<R> { fo ...

Why is there a false positive in the onChange event for the number type in React TypeScript?

I encountered an error on line 24 Argument of type 'string' is not assignable to parameter of type 'SetStateAction'.ts(2345) This issue occurred while working with TypeScript for a React experiment. const App: React.FC = () => ...

"Send the selected radio button options chosen by the user, with the values specified in a JSON format

My current task involves inserting radio button values into a MySql database using Angular. The form consists of radio buttons with predefined values stored in a json file. Below is an example of how the json file is structured: //data.json [{ "surve ...

What is the best way to set the first option in a mat-select to be

My approach to date selection involves using 3 mat-select components for day, month, and year. You can view a demo of this setup here. In an attempt to improve the code, I decided to set the initial options as null by modifying the following lines: allDat ...

Choose an option from a selection and showcase it

I need to implement a modal that displays a list of different sounds for the user to choose from. Once they select a sound, it should be displayed on the main page. Here is the code snippet for the modal page: <ion-content text-center> <ion-ca ...

Is there a way to turn off grouping in the Angular Grid when there are no items to group?

Here is a snippet of code that includes an Angular component with an ag-Grid: @Component({ selector: 'my-app', template: `<ag-grid-angular style="height: 100%;" class="ag-theme-alpine" [columnDefs]=" ...

There are a pair of Ionic2 menus; one is currently visible while the other remains hidden

I am having an issue with my Ionic2 app where I have two pages, each with similar menus named XXX.html. One page displays its menu correctly, but the other does not show its menu at all. Is there a limitation in Ionic2 that prevents having two menus on the ...

Obtain the identifier for the navigation hyperlink

I need to dynamically add an ID using JavaScript @Component({ selector: 'kit-general-16', templateUrl: './16.component.html', styleUrls: ['./16.component.scss'], }) export class CuiGeneral16Component implements OnChanges ...

Customize the text for the material icon

Can I customize an icon by using the following code: import FiberNewIcon from "@mui/icons-material/FiberNew"; Is there a way to add custom text to the icon? ...

The distribution of intersection types is not properly handled by Typescript's array.map function

My array is of type object[] & Tree[], but when using arr.map(child => ...), the type of child is inferred as object instead of object & Tree. Is there a way to avoid this without additional casting? It's worth noting that Tree extends ob ...

Is there a way to define an object's keys as static types while allowing the values to be dynamically determined?

I am attempting to construct an object where the keys are derived from a string union type and the values are functions. The challenge lies in wanting the function typings to be determined dynamically from each function's implementation instead of bei ...

The required property 'intersect' is not found in the type 'import("cesium").BoundingSphere'

Incorporating Cesium into a ReactJs application has been my recent project. I have successfully displayed various factories in the cesium viewer and drawn polygon grids on their coordinates. However, I am encountering confusion with one particular aspect. ...

Encountered an issue while trying to encapsulate the App using Redux

Upon attempting to integrate Redux with my TypeScript React application, I encountered this error message: Error: Objects are not valid as a React child (found: object with keys {children}). If you meant to render a collection of children, use an array i ...

Ensuring Type Safety for Collections in TypeScript

My code snippet looks like this: portfolioList: MatTableDataSource<Portfolio>; ngOnInit(): void { this.backend.getStatement().subscribe( list => { if(list as Portfolio[]) this.portfolioList = new MatTableDataSource(l ...

How can I specifically activate the keydown event for alphanumeric and special characters in Angular7?

I am looking to create a keydown event that will be triggered by alphanumeric or special characters like #$@. <input type="text" style="width: 70%;" [(ngModel)]= "textMessage" (keydown) ="sendTypingEvent()" > However, I want to prevent the event ...

What is the best way to declare a TypeScript type with a repetitive structure?

My data type is structured in the following format: type Location=`${number},${number};${number},${number};...` I am wondering if there is a utility type similar to Repeat<T> that can simplify this for me. For example, could I achieve the same resul ...