== Why is this an issue?

Initially, TypeScript defined "internal modules" and "external modules":

* Internal modules: The `module` keyword was introduced in TypeScript to define internal modules. Internal modules were used to group classes, interfaces, and functions into logical units.
* External modules refer to JavaScript modules, introduced in ECMAScript 2015. In TypeScript, just as in JavaScript (after ECMAScript 2015), any file containing a top-level `import` or `export` is considered a module.

However, in order to avoid confusion with similarly named terms, `module` was deprecated in favor of the `namespace` keyword, and "external modules" became simply "modules", as to align with ECMAScript 2015’s terminology.

Now that ``++namespace++`` is available, the use of ``++module++`` is deprecated because it does the same thing, and its use could confuse maintainers unaware of the history of the language. Therefore, the use of `module` is discouraged in TypeScript code.

[source,javascript,diff-id=1,diff-type=noncompliant]
----
module myMod {  // Noncompliant
  // ...
}
----

Anywhere the `module` keyword was used when declaring an internal module, the `namespace` keyword should be used instead.

[source,javascript,diff-id=1,diff-type=compliant]
----
namespace myMod {
  // ...
}
----

== Resources

=== Documentation

* TypeScript Documentation - https://www.typescriptlang.org/docs/handbook/namespaces.html[Namespaces]
* TypeScript Documentation - https://www.typescriptlang.org/docs/handbook/modules.html[Modules]
* ECMAScript - https://262.ecma-international.org/6.0/[ECMAScript 2015]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Create a "namespace" instead of  "module" here.


=== Highlighting

``++module++``


endif::env-github,rspecator-view[]
