Home > Net >  How to get returned class properties when passing as argument in typescript
How to get returned class properties when passing as argument in typescript

Time:12-21

I having issue with getting properies of class when I'm passing that as parameter in another class method

My issue is so complicted in my code and I tried to simplified it to get the solution

imagine I have class as User like this :

class User {
  name!:string 

  static setName(_name:string){
    const user = new User()
    user.name = _name 
    return user
 
  }

}

and Company with almost same properties:

class Company {
  name!:string 
  brand!:string = 'mtx'

  static setName(_name:string){
    const company = new Company()
    company.name = _name 
    return company
  }

}

and I have Registration Class that has register method:

class Registration {

  static register<K >(name:string,Model: K & { setName:(n:string)=>K}): K{
   return Model.setName(name)
  }

}

and I register user and company in this way :

let user = Registration.register('mamad',User)
let company = Registration.register('mamad',Company)

so this is working for user but for company returns this error :

enter image description here

and here is playground

CodePudding user response:

You can just remove the K & so it will look like this:

class Registration {

  static register<K >(name:string,Model: { setName:(n:string)=>K}): K{
   return Model.setName(name)
  }

}

When you are calling:

let company = Registration.register('mamad',Company)

You are not supplying K argument, you are only basically supplying the setName, because that is present as static property. If you would have the K & part, then you would need to be supplying actual instance, new Company() or such in order to be able to refer to instance fields.

  • Related