Triple-Slash Directives #
Triple-slash directives are single-line comments containing a single XML tag. The contents of the comment are used as compiler directives.
Triple-slash directives are only valid at the top of their containing file. A triple-slash directive can only be preceded by single or multi-line comments, including other triple-slash directives. If they are encountered following a statement or a declaration they are treated as regular single-line comments, and hold no special meaning.
/// <reference path="..." />
#
The /// <reference path="..." /> directive is the most common of this
group. It serves as a declaration of dependency between files.
Triple-slash references instruct the compiler to include additional files in the compilation process.
They also serve as a method to order the output when using
out or
outFile. Files are
emitted to the output file location in the same order as the input after
preprocessing pass.
Preprocessing input files #
The compiler performs a preprocessing pass on input files to resolve all triple-slash reference directives. During this process, additional files are added to the compilation.
The process starts with a set of root files; these are the file names
specified on the command-line or in the
files list in the
tsconfig.json file. These root files are preprocessed in the same
order they are specified. Before a file is added to the list, all
triple-slash references in it are processed, and their targets included.
Triple-slash references are resolved in a depth-first manner, in the
order they have been seen in the file.
A triple-slash reference path is resolved relative to the containing file, if a relative path is used.
Errors #
It is an error to reference a file that does not exist. It is an error for a file to have a triple-slash reference to itself.
Using --noResolve
#
If the compiler flag
noResolve is
specified, triple-slash references are ignored; they neither result in
adding new files, nor change the order of the files provided.
/// <reference types="..." />
#
Similar to a /// <reference path="..." /> directive, which serves as a
declaration of dependency, a /// <reference types="..." /> directive
declares a dependency on a package.
The process of resolving these package names is similar to the process
of resolving module names in an import statement. An easy way to think
of triple-slash-reference-types directives are as an import for
declaration packages.
For example, including /// <reference types="node" /> in a declaration
file declares that this file uses names declared in
@types/node/index.d.ts; and thus, this package needs to be included in
the compilation along with the declaration file.
Use these directives only when you’re authoring a d.ts file by hand.
For declaration files generated during compilation, the compiler will
automatically add /// <reference types="..." /> for you; A
/// <reference types="..." /> in a generated declaration file is added
if and only if the resulting file uses any declarations from the
referenced package.
For declaring a dependency on an @types package in a .ts file, use
types on the command
line or in your tsconfig.json instead. See
using @types,
typeRoots and types in tsconfig.json
files for more details.
/// <reference lib="..." />
#
This directive allows a file to explicitly include an existing built-in lib file.
Built-in lib files are referenced in the same fashion as the
lib compiler option in
tsconfig.json (e.g. use lib="es2015" and not
lib="lib.es2015.d.ts", etc.).
For declaration file authors who rely on built-in types, e.g. DOM APIs
or built-in JS run-time constructors like Symbol or Iterable,
triple-slash-reference lib directives are recommended. Previously these
.d.ts files had to add forward/duplicate declarations of such types.
For example, adding /// <reference lib="es2017.string" /> to one of
the files in a compilation is equivalent to compiling with
--lib es2017.string.
/// <reference lib="es2017.string" />
"foo".padStart(4);
/// <reference no-default-lib="true"/>
#
This directive marks a file as a default library. You will see this
comment at the top of lib.d.ts and its different variants.
This directive instructs the compiler to not include the default
library (i.e. lib.d.ts) in the compilation. The impact here is similar
to passing
noLib on
the command line.
Also note that when passing
skipDefaultLibCheck,
the compiler will only skip checking files with
/// <reference no-default-lib="true"/>.
/// <amd-module />
#
By default AMD modules are generated anonymous. This can lead to
problems when other tools are used to process the resulting modules,
such as bundlers (e.g. r.js).
The amd-module directive allows passing an optional module name to the
compiler:
amdModule.ts #
///<amd-module name="NamedModule"/>
export class C {}
Will result in assigning the name NamedModule to the module as part of
calling the AMD define:
amdModule.js #
define("NamedModule", ["require", "exports"], function (require, exports) {
var C = (function () {
function C() {}
return C;
})();
exports.C = C;
});
/// <amd-dependency />
#
Note: this directive has been deprecated. Use
import "moduleName";statements instead.
/// <amd-dependency path="x" /> informs the compiler about a non-TS
module dependency that needs to be injected in the resulting module’s
require call.
The amd-dependency directive can also have an optional name
property; this allows passing an optional name for an amd-dependency:
/// <amd-dependency path="legacy/moduleA" name="moduleA"/>
declare var moduleA: MyType;
moduleA.callStuff();
Generated JS code:
define(["require", "exports", "legacy/moduleA"], function (
require,
exports,
moduleA
) {
moduleA.callStuff();
});
::: _attribution
© 2012-2023 Microsoft
Licensed under the Apache License, Version 2.0.
https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html{._attribution-link}
:::