Si tengo dos nombres de variables A y b , mientras que A es un constructor de clase y b es una función, ¿cómo escribo una función que tome el nombre como parámetro y distinga si es un constructor de clase o no?
O dicho de otro modo, ¿cómo sé si tengo que llamar a la función con el operador new o no?
class A{ constructor(){ } } function b(){ } isClass(arg:(new ()=>A) | Function):boolean{ // some code that returns true if arg is a class } isClass(b) // false isClass(A) // trueHay una solución que se me ocurrió:
arg.toString().startsWith("class") Esto funciona porque arg.toString() devuelve la definición de arg , en este ejemplo algo así como class A{constructor(){}} para A y function b(){} para b . Mi solución funciona, pero puedo imaginar que haya algo mejor que eso.
El uso del operador typeof devuelve "función" tanto para A como para b , y arg.prototype solo no está definido si b es una función de flecha.