Is it possible for additional properties of the TypeScript class to return to default values ​​if omitted?

Is there any way to assign property values ​​to the element of the class by default, if they are omitted by the user?

I have a custom class that contains an optional instance of another class:

export class MyClass1 {
    constructor() {
        this.name = "";
        this.classInstance = new MyClass2();
    }
    name: string;           // name of the object
    classInstance?: MyClass2;
}

class MyClass2 {
    constructor() {
        this.name = "MyClass2 initial name";
    }

    name: string;
}

The content for MyClass1 comes from JSON, so sometimes the class variable member classInstance can be undefined. In these cases, I would like the constructor MyClass1 to initiate a new variable MyClass2 () into the member variable of the class.

Here is how I can create an instance of MyClass1:

let myNewClass: MyClass1 = {
    name: "MyClass"
}

Instance , , . , . classInstance, , MyClass1. , , ( , ):

let myNewClass: MyClass1 = {
    name: "MyClass"
} as MyClass1

classInstance , , null/ undefined.

, ( ), .

+1
1

let myNewClass: MyClass1 = {
    name: "MyClass"
} as MyClass1

MyClass1. TypeScript "", , MyClass1.

var myNewClass = { name: "MyClass" }. MyClass1 . .

- JSON . , (classInstance) undefined, , constructor({ classInstance = new MyClass2 }) { ... } :

export class MyClass1 {
    constructor(jsonMyClass1: MyClass1 = {}) {
        const { name, classInstance } = jsonMyClass1;
        this.name = 'name' in jsonMyClass1 ? name : "";
        this.classInstance = 'classInstance' in jsonMyClass1 ? classInstance : new MyClass2;
    }
    name: string;
    classInstance?: MyClass2;
}

let myNewClass: MyClass1 = new MyClass1({
    name: "MyClass"
});

, (.. null , ), , , :

export class MyClass1 {
  constructor(jsonMyClass1: MyClass1 = {} as MyClass1) {
        const { name = "", classInstance = new MyClass2 } = jsonMyClass1;
        this.name = name;
        this.classInstance = classInstance;
    }
    name: string;
    classInstance: MyClass2;
}

let myNewClass: MyClass1 = new MyClass1({
    name: "MyClass",
    classInstance: null
});
+1

Source: https://habr.com/ru/post/1687936/


All Articles