Inline Type Exports
Types and interfaces can be exported directly at the point of declaration using theexport keyword.
Default Exports
TypeScript supports default exports for types, but enforces a strict syntactic distinction between interfaces and type aliases. While interfaces can be exported as defaults inline, type aliases cannot and will result in a syntax error. They must be split into a declaration and a subsequent export statement.Export Blocks
Types can be declared locally within a module and exported collectively at the end of the file.Type-Only Exports (export type)
TypeScript provides the export type modifier to explicitly denote that the exported members are strictly compile-time types. This guarantees to the compiler and external transpilers (like Babel, SWC, or esbuild) that the export contains no runtime values.
type modifiers.
Re-exporting Types
Modules can re-export types originating from other modules. TypeScript provides specific syntax to differentiate between re-exporting values, types, or both.Compiler Mechanics and Flags
The behavior of type exports is heavily influenced by TypeScript compiler options, specifically regarding single-file transpilation:- Type Erasure: During the emit phase,
tscremoves all type declarations and type-only exports. If a module only exports types, the entireexportstatement is omitted from the resulting.jsfile. isolatedModules: When enabled, transpilers operate on a single file at a time without cross-file type-checker context. Local type exports (e.g.,type T = string; export { T };) are valid because the transpiler can infer the type from the local declaration. However, re-exports (e.g.,export { T } from './module';) are ambiguous because the transpiler cannot inspect the external file to determine ifTis a value or a type. Explicitexport typemodifiers are required for these re-exports to ensure the transpiler safely erases them.verbatimModuleSyntax: When enabled intsconfig.json, TypeScript enforces strict adherence to explicit type modifiers. Any export that is only used as a type must be exported usingexport type, ensuring predictable and safe module emit across all build tools.
Tired of Poor TypeScript Skills? Fix That With Deep Grasping!Learn More





