I found a different approach to solve this organization problem.
To return to the art of ASCII (แตแดฅแต)
My folder structure is as follows:
| |-- myawesomemodule | | | |-- myawesomeclass.ts | |-- myevenmoreawesomeclass.ts | |-- myawesomemodule.ts | |-- myevenmoreawesomemodule | |-- myotherclass.ts | |-- myanotherclass.ts | |-- myevenmoreawesomemodule.ts | index.ts
In myawesomemodule.ts , I do:
export {MyAwesomeClass} from './myawesomeclass.ts' export {MyEvenMoreAwesomeClass} from './myevenmoreawesomeclass.ts'
Similarly in myevenmoreawesomemodule.ts , I do:
export {MyOtherClass} from './myotherclass.ts' export {MyAnotherClass} from './myanotherclass.ts'
And finally, at the root level in index.ts , I do:
import * as MyAwesomeModule from "./myawesomemodule/myawesomemodule"; import * as MyEvenMoreAwesomeModule from "./myevenmoreawesomemodule/myevenmoreawesomemodule"; export {MyAwesomeModule}; export {MyEvenMoreAwesomeModule};
Now I can send this module to the consumer, pack it as NPM, etc.
From the consumer, I do:
import MyPackage = require("mypackage");
OR
import * as MyPackage from "./path/to/index.ts"
Then I refer to the class names, therefore:
let instance = new MyPackage.MyAwesomeModule.MyAwesomeClass();
I find this approach a little better than exposing all my classes to a large module at the root level.