Sé que esto parece un problema extraño, pero en este momento estoy creando un servidor web para guardar datos en una base de datos mongodb usando mongoose. Para usar eso, necesito crear un modelo con un esquema que básicamente defina los valores que puedo buscar, así como el tipo que deberían ser (Cadena, Número, etc.)
Como dije antes, dado que es un servidor web, me gustaría hacerlo de modo que el servidor web cree el modelo y el esquema, con un objeto de cuerpo en la solicitud. Sin embargo, hay un problema. Solo puedo pasar el tipo (Cadena, Número, etc.) como una cadena. Se me ocurrió una solución para analizar el valor en un tipo, que es el siguiente código
getTypeByString: function (string) { if (string == 'String') { return String } if (string == 'Number') { return Number } if (string == 'Array') { return Array } if (string == 'Object') { return Object } }Sin embargo, siento que probablemente haya una solución más simple. Si hay o no hay, por favor hágamelo saber! Eventualmente, me gustaría publicar mi código en GitHub, y me gustaría que fuera lo más dinámico y simple posible. Gracias de antemano
Podría usar una declaración de cambio para hacer el código un poco más simple:
getTypeByString: function(stype){ switch(stype){ case "String": return String; case "Number": return Number; case "Array": return Array; case "Object" : return Object; default: return null; // or throw an error }; };String , Number , Array y Object también son propiedades de la variable global (o variable de window si está en un navegador).
Puedes comprobarlo tú mismo evaluando:
global['String'] === String // true Por esta razón, puede usar la cadena para buscar el tipo dentro del objeto global y devolverlo:
getTypeByString: function (string) { if (['String', 'Number', 'Array', 'Object'].includes(string)) // be sure that you are actually returning a type return global[string]; return null;Con respecto a obtener un tipo definido de una cadena, puede usar un objeto para definir los tipos y usar la cadena como clave.
const DefinedTypes = { String: String, Number: Number, Array: Array, Object: Object, CustomType: classOfCustomType };usándolo
const typeAsString = 'String'; const type = DefinedTypes[typeAsString];