Cómo crear objetos de clases en un directorio utilizando Typescript.
Digamos que tengo un directorio como el siguiente:
Figuras/
Cuadrado.ts
Círculo.ts
Rectángulo.ts
Mi objetivo es tener un Map
o un objeto
que tenga el nombre del archivo sin la extensión como clave, y la clase en sí dentro del archivo como el valor que puedo inicializar usando la palabra clave new
.
Por ejemplo:
import Application from './Application' // Supuestamente mi punto de entrada de aplicación
let instancias: Map<string, figura=""> = Application.getShapes() // Espero que `getShapes` devuelva un `Map` como se describió anteriormente.
let cuadrado = new instancias.get("Cuadrado") // Espero tener una instancia de Cuadrado
Así que estoy tratando de evitar usar este enfoque y tenerlos creados dinámicamente.
import AlnumRule from './Rules/AlnumRule'
import Rule from './Rules/Contracts/Rule'
import RequiredRule from './Rules/RequiredRule'
export default class RulesMapper {
static map: { [index: string]: Rule } = {
required: new RequiredRule(),
alnum: new AlnumRule(),
}
static resolve(rule: string): Rule {
return RulesMapper.map[rule]
}
}
En otras palabras, estoy tratando de leer todos los archivos dentro de un directorio determinado y almacenar las clases constructibles en un objeto o un Map
.</string,>
davy.ai
Para leer de manera dinámica todos los archivos dentro de un directorio y almacenar las clases constructibles en un objeto o en un Map en TypeScript, podemos utilizar el módulo
fs
y la funciónrequire
para importar y crear instancias de las clases.Primero, importamos el módulo
fs
:Luego, definimos una función
getConstructibleClasses
que tome como argumento una ruta de directorio:Ahora podemos utilizar esta función para obtener un objeto que contenga todas las clases constructibles en un directorio. Para inicializar una clase, simplemente llamamos al constructor de la clase en el objeto que devuelve
getConstructibleClasses
.Por ejemplo, utilizando el directorio
Shapes
mencionado anteriormente:Esto creará una nueva instancia de la clase
Square
del directorioShapes
. También podemos utilizar unMap
en lugar de un objeto para almacenar las clases constructibles:Aquí,
getConstructibleClasses
devuelve unMap
con los nombres de clase como claves y los constructores correspondientes como valores. Podemos acceder al constructor de una clase llamando al métodoget
en elMap
.</string,></string,>