Вы можете создать интерфейс с обязательными и необязательными свойствами, которые вам необходимо передать в особых случаях, как показано ниже
export interface IUser{
name: string;
address: string;
semester?: string,
degree?: string
}
Здесь имя, адрес обязательны для каждого случая, но семестр и степень могут быть переданы в зависимости от условия.
Вы можете использовать этот интерфейс в конструкторе вашего класса User
, как показано ниже, чтобы установить значение свойств.
export class User{
//all fields here
public name: string;
public address: string;
public semester?: string;
public degree?: string;
constructor(user:IUser) {
this.name = user.name;
this.address = user.address;
this.semester = user.semester;
this.degree = user.degree;
}
}
Наконец, вы можете создать экземпляр класса, как показано ниже -
let data2:IUser = { name: data.name, address: data.address, degree: data.degree};
let techobj = new User(data2);
ИЛИ вы можете сделать это так
let techobj2 = new User({ name: data.name, address: data.address, degree: data.degree});
Аналогично для Student
вы можете создать экземпляр, подобный этому -
let techobj3 = new User({ name: data.name, address: data.address, semester:data.semester });
Вот полный код -
export interface IUser{
name: string;
address: string;
semester?: string,
degree?: string
}
export class User{
//all fields here
public name: string;
public address: string;
public semester?: string;
public degree?: string;
constructor(user:IUser) {
this.name = user.name;
this.address = user.address;
this.semester = user.semester;
this.degree = user.degree;
}
}
let data:IUser = { name: "Niladri", address: "123", degree: "GRAD" };
let techobj = new User(data);
///OR
let techobj2 = new User({ name: "Niladri", address: "123", degree: "GRAD" });
//Similary
let techobj3 = new User({ name: "Niladri", address: "123", semester:"6th" });
console.log(techobj2.degree); //GRAD
console.log(techobj3.semester); //6th
И ваш сервисный звонок должен быть таким -
selectedUser:string; //form selected like teacher etc
submit(data){
if(selectedUser === 'Teacher'){
let techobj =new User({ name: data.name, address: data.address, degree: data.degree});
this.userservice.post(url,teachobj);
}
if(selectedUser === 'Student'){
let stuobj =new User({ name: data.name, address: data.address, semester:data.semester });
this.userservice.post(url,stuobj);
}
..... so on
}
P.S - если вы передадите null в вашем текущем конструкторе для нежелательных параметров, то это также будет работать
Редактировать 2: Другой подход заключается в создании базового класса User
и наследовании от этого класса для создания Student
и Teacher
классов, а затем вызове super()
в конструкторе дочерних классов для передачи name,address
значение свойства для базового User
класса. Но в этом случае будет много дочерних классов в зависимости от количества условий if
рабочая демоверсия:
Ссылка