starter node create application app node.js typescript

node.js - create - Importación del módulo TypeScript en nodejs



typescript express mongodb (3)

No recomendaría el uso de la palabra clave explícita de module (o namespace ), es un vestigio residual de una época anterior. * Por lo general, no los necesita porque cualquier archivo mecanografiado con una import o export nivel superior es automáticamente un módulo. Tu segundo ejemplo de myModule.ts fue bueno.

export class MyClass { ... }

Pero cuando lo importas a otro módulo de escritura de tipos, querrás usar algo como esto:

import { MyClass } from ''./myModule''; var myInstance = new MyClass();

Personalmente, no me gusta la repetitividad de la línea 1, pero es lo que exige el lenguaje, así que aprendí a aceptarlo. Creo que la utilidad de esta sintaxis no es aparente a menos que abandone el patrón de archivo por clase. Usted elige y elige qué nombres importar desde el módulo, de modo que no se produzca contaminación no intencionada en el espacio de nombres.

Una sintaxis de importación alternativa extrae todos los nombres del módulo, pero debe calificar los nombres con el módulo cuando los use. Por eso también es resistente a la colisión de nombres.

import * as myModule from ''./myModule''; var myInstance = new myModule.MyClass();

Hay excepciones a la regla general sobre no necesitar palabras clave de module / namespace , pero no comience por centrarse en ellas. Piensa archivo == módulo .

¿Cuál es la mejor práctica para importar módulos en nodejs con mecanografía? Vengo de c # background, así que quiero hacer algo como esto

MyClass.ts

module MyNamespace { export class MyClass { } }

app.ts

// something like using MyNamespace new MyNamespace.MyClass();

o

MyClass.ts

export class MyClass { }

app.ts

import MyClass = module("MyClass") new MyClass();

Sé que puedo hacer esto y funcionará, pero luego tengo que encontrar dos nombres para cada clase

import MyClass2 = module("MyClass") new MyClass2.MyClass();

El punto es separar las clases a múltiples archivos .ts (preferiblemente un archivo por clase). Entonces la pregunta es, ¿cómo se hace esto?



Tu tienes dos opciones aquí:

Si insiste en usar módulos CommonJS o AMD, entonces tendrá que usar módulos externos tal como lo describió en su pregunta. Si usas o no un módulo para declarar tu propio espacio de nombres, es sobre todo una cuestión de gustos. La única forma de evitar el problema de especificar dos nombres es crear una variable que asigne un alias al tipo:

mymodule.ts

export module MyNamespace { export class MyClass { } }

app.ts

import ns = require(''mymodule''); var myclass = new ns.MyNamespace.MyClass(); var myclassalias = ns.MyNamespace.MyClass; var myclass2 = new myclassalias();

Su otra opción es usar módulos internos que se usan principalmente para estructurar su código internamente. Los módulos internos están dentro del alcance en tiempo de compilación utilizando rutas de referencia .

mymodule.ts

module MyNamespace { export class MyClass { } }

app.ts

///<reference path=''mymodule.ts''/> var myclass = new MyNamespace.MyClass();

Creo que tendrás que decidir por ti mismo cuál de esos dos enfoques es más apropiado.