This blog post, like most, is for my own edification. Organizing TypeScript modules is hard for me. These notes are from the official TypeScript module advice .
namespaces
- these were previously "internal modules"
- avoid, unless there is a strong reason
modules
- these were previously "external modules"
- a module hides its members
-
expose members with
export -
consume exported members with
import -
a file containing a top-level
import/exportis a module
export
- we can export any module member
- e.g. variable, function, class, interface...
- exports have several useful forms
-
export { Foo }; -
export { Foo as Bar }; -
export class Foo { } -
export { Foo as Bar } from "./Foo"; -
export * from "./Foo"; -
export default class Foo { } // inline default - if inline default fails, use this form
-
export default MyEnum -
export default IMyInterface
import
- we can import any member that modules export
- imports have several useful forms
-
import { Foo } from "./Foo"; -
import { Foo as Bar } from "./Foo"; -
import * as Foobar from "./Foo"; -
import "./Foo"; // side-effects only -
import foo from "./Foo"; // with default -
import bar from "./Foo"; // with rename
export advice
- avoid nesting
- export classes; avoid using namespaces
- export functions; avoid using static methods
- if a file has a single export
-
then use
export default -
else use multiple
exportstatements - re-export when extending
-
e.g.
export { SubClass as ParentClass }
import advice
-
list each named item
import { x, y, z } ... -
if lots, use a namespace
import * as Foo ...
For more details, read the official modules advice from TypeScript .