Skip to main content

prefer-namespace-keyword

Require using namespace keyword over module keyword to declare custom TypeScript modules.

🔧

Some problems reported by this rule are automatically fixable by the --fix ESLint command line option.

TypeScript historically allowed a form of code organization called "custom modules" (module Example {}), later renamed to "namespaces" (namespace Example).

Namespaces are an outdated way to organize TypeScript code. ES2015 module syntax is now preferred (import/export).

For projects still using custom modules / namespaces, it's preferred to refer to them as namespaces. This rule reports when the module keyword is used instead of namespace.

This rule does not report on the use of TypeScript module declarations to describe external APIs (declare module 'foo' {}).

eslint.config.mjs
export default tseslint.config({
rules: {
"@typescript-eslint/prefer-namespace-keyword": "error"
}
});

Try this rule in the playground ↗

Examples

module Example {}
Open in Playground

Options

This rule is not configurable.

When Not To Use It

If you are not using TypeScript's older module/namespace keywords, then you will not need this rule.

Further Reading

Resources