namespace typescript npm commonjs

import namespace typescript



Commonjs library''s index.ts como módulo externo (1)

Un día de tiempo perdido y he encontrado una solución fea. Para mantener la estructura anidada de la biblioteca Commonjs exportada, debe dentro de cada ''nivel'' poner su propio index.ts que agregará y reexportará todas las funcionalidades del mismo ''nivel''. Para mi ejemplo anterior, se verá así:

—lib ——Helper.ts ——Serialization.ts ——meta ——— index.ts ——— Entity.ts —index.ts

Donde raíz index.ts:

export * from ''./lib/Helper''; export * from ''./lib/Serialization''; import * as S from ''./lib/Serialization''; //This is case where one file contains several exported classes that we want to keen as separate module export {S as Serialization}; import * as Meta from ''./lib/meta/index''; export {Meta};

Y meta / index.ts:

export * from ''./Entity'';

Me encantaría saber si esta tarea común (?) Es posible de resolver sin archivos adicionales por ''nivel''.

Necesito alguna guía para desarrollar correctamente la biblioteca commonjs reutilizable (paquete npm). Digamos que la estructura de la biblioteca es la siguiente:

—lib ——Helper.ts ——Serialization.ts ——meta ——— Entity.ts —index.ts

Y así. Cada archivo es un módulo externo.

Ahora necesito crear un archivo de entrada (digamos index.ts) que expondrá la funcionalidad de la biblioteca y servirá como punto de entrada. Aquí no puedo entender mi camino para crearlo. Me gustaría mantener la estructura anidada sin aplanar exportando todo:

export * from ''./lib/Helper’; export * from ''./lib/Serialization’; export * from ''./lib/meta/Entity’; …

Porque esto eliminará la agrupación lógica y puede conducir en el futuro a posibles conflictos de nombres

También he intentado tener index.ts como este:

import {Helper} from ''./lib/Helper''; import * as Serialization from ''./lib/Serialization''; import * as Decorators from ''./lib/meta/Decorators''; let core = { Helper: Helper, Serialization: Serialization, Meta: { Entity: Entity, } } export default core;

Funciona perfecto hasta que llegue a consumir tipos importados como este:

import Core from ’nameOfTheNpmPackage''; let Entity = Core.Meta.Entity; function f(e: Entity)//<—This produce error cannot find name ‘Entity'' { }

Como no están en el espacio de declaración de tipo (¿hay alguna forma de copiarlos allí si no están en el espacio de nombres?)

Otra opción que he intentado es generar un solo archivo d.ts para toda la biblioteca mediante el uso de outFile + amd. Pero ese archivo no es un módulo externo.

Entonces mi pregunta es: ¿cómo es posible escribir index.ts para que sea un módulo externo y exportar todas las funcionalidades expuestas por la biblioteca?

Gracias por adelantado.