2

I want create classes dynamicaly in runtime, and I want parametrize the class name.

function newClass(className:string) {
   return class MyDynamicClass { }
}

// expected class name: "Person"
let personClass = newClass("Person")

// expected class name: "Contact"
let contactClass = newClass("Contact")

P.S.: The proposed duplicate question (ES6 Dynamic class names) is with wrong accepted answer and other answers does not fulfil my requirements.

TcKs
  • 25,849
  • 11
  • 66
  • 104

1 Answers1

0

I don't think it is possible to make dynamic class name like here:

class [className] {}

It is not allowed. However, you can create an object with className property (class expression):

const newClass = (className: string) => ({
  [className]: class { }
}[className])

// expected class name: "Person"
let personClass = newClass("Person")
personClass.name // Person

I know, personClass returns class {} without name. I think this is the closest working solution.