Movatterモバイル変換


[0]ホーム

URL:


Skip to main content

no-namespace

Disallow TypeScript namespaces.

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).

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

  • Flat Config
  • Legacy Config
eslint.config.mjs
exportdefault tseslint.config({
rules:{
"@typescript-eslint/no-namespace":"error"
}
});

Try this rule in the playground ↗

Examples

Examples of code with the default options:

  • ❌ Incorrect
  • ✅ Correct
module foo{}
namespace foo{}

declaremodule foo{}
declarenamespace foo{}
Open in Playground

Options

This rule accepts the following options:

typeOptions=[
{
/** Whether to allow `declare` with custom TypeScript namespaces. */
allowDeclarations?:boolean;
/** Whether to allow `declare` with custom TypeScript namespaces inside definition files. */
allowDefinitionFiles?:boolean;
},
];

const defaultOptions: Options=[
{ allowDeclarations:false, allowDefinitionFiles:true},
];

allowDeclarations

Whether to allowdeclare with custom TypeScript namespaces. Default:false.

Examples of code with the{ "allowDeclarations": true } option:

  • ❌ Incorrect
  • ✅ Correct
module foo{}
namespace foo{}
Open in Playground

Examples of code for the{ "allowDeclarations": false } option:

  • ❌ Incorrect
  • ✅ Correct
module foo{}
namespace foo{}
declaremodule foo{}
declarenamespace foo{}
Open in Playground

allowDefinitionFiles

Whether to allowdeclare with custom TypeScript namespaces inside definition files. Default:true.

Examples of code for the{ "allowDefinitionFiles": true } option:

  • ❌ Incorrect
  • ✅ Correct
// if outside a d.ts file
module foo{}
namespace foo{}

// if outside a d.ts file and allowDeclarations = false
module foo{}
namespace foo{}
declaremodule foo{}
declarenamespace foo{}
Open in Playground

When Not To Use It

If your project uses TypeScript's CommonJS export syntax (export = ...), you may need to use namespaces in order to export types from your module.You can learn more about this at:

If your project uses this syntax, either because it was architected before modern modules and namespaces, or because a module option such asverbatimModuleSyntax requires it, it may be difficult to migrate off of namespaces.In that case you may not be able to use this rule for parts of your project.

You might consider usingESLint disable comments for those specific situations instead of completely disabling this rule.

Further Reading

Resources


[8]ページ先頭

©2009-2025 Movatter.jp