Spec-Zone.ru › TypeScript 5.1

Директивы с тройными слешами

Директивы с тройными слешами — это однострочные комментарии, содержащие один XML-тег. Содержимое комментария используется как директивы компилятора.

Директивы с тройными слешами только допустимы в начале содержащего их файла. Директива с тройными слешами может предшествовать только однострочным или многострочным комментариям, включая другие директивы с тройными слешами. Если они встречаются после оператора или объявления, они обрабатываются как обычные однострочные комментарии и не имеют специального значения.

/// <reference path="..." />

Директива /// <reference path="..." /> — наиболее распространённая в этой группе. Она служит объявлением зависимости между файлами.

Ссылки с тройными слешами инструктируют компилятор включить дополнительные файлы в процесс компиляции.

Они также служат способом упорядочения вывода при использовании out или outFile. Файлы выводятся в выходной файл в том же порядке, что и входные, после прохождения предобработки.

Предобработка входных файлов

Компилятор выполняет предобработку входных файлов для разрешения всех директив с тройными слешами. В ходе этого процесса к компиляции добавляются дополнительные файлы.

Процесс начинается с набора корневых файлов; это имена файлов, указанные в командной строке или в списке files в файле tsconfig.json. Эти корневые файлы предобрабатываются в том же порядке, в котором они указаны. Перед добавлением файла в список обрабатываются все ссылки с тройными слешами в нём, а их целевые файлы включаются. Ссылки с тройными слешами разрешаются по принципу глубины, в порядке их обнаружения в файле.

Путь ссылки с тройными слешами разрешается относительно содержащего файла, если используется относительный путь.

Ошибки

Ошибка — ссылаться на файл, которого не существует. Ошибка — у файла есть ссылка с тройными слешами на себя.

Использование --noResolve

Если указан флаг компилятора noResolve, ссылки с тройными слешами игнорируются; они не приводят к добавлению новых файлов и не меняют порядок предоставленных файлов.

/// <reference types="..." />

Аналогично директиве /// <reference path="..." />, которая служит объявлением зависимости, директива /// <reference types="..." /> объявляет зависимость от пакета.

Процесс разрешения этих имён пакетов аналогичен процессу разрешения имён модулей в операторе import. Легче всего представить директивы triple-slash-reference-types как import для объявления пакетов.

Например, включение /// <reference types="node" /> в файл объявления означает, что этот файл использует имена, объявленные в @types/node/index.d.ts; следовательно, этот пакет необходимо включить в компиляцию вместе с файлом объявления.

Используйте эти директивы только при ручном создании файла d.ts.

Для файлов объявления, сгенерированных во время компиляции, компилятор автоматически добавит /// <reference types="..." /> для вас; директива /// <reference types="..." /> в сгенерированном файле объявления добавляется только в том случае, если результирующий файл использует какие-либо объявления из ссылаемого пакета.

Для объявления зависимости от пакета @types в файле .ts используйте types в командной строке или в вашем файле tsconfig.json. Подробности см. в использовании @types, typeRoots и types в файлах tsconfig.json.

/// <reference lib="..." />

Эта директива позволяет файлу явно включить существующий встроенный файл lib.

Встроенные файлы lib ссылаются так же, как и опция компилятора lib в tsconfig.json (например, используйте lib="es2015" и не lib="lib.es2015.d.ts", и т. д.).

Для авторов файлов объявления, которые полагаются на встроенные типы, например, DOM-API или встроенные конструкторы JS-среды выполнения, такие как Symbol или Iterable, рекомендуются директивы triple-slash-reference lib. Раньше эти файлы .d.ts должны были добавлять объявления-перенаправления/дубликаты таких типов.

Например, добавление /// <reference lib="es2017.string" /> в один из файлов в компиляции эквивалентно компиляции с --lib es2017.string.

/// <reference lib="es2017.string" />

"foo".padStart(4);

/// <reference no-default-lib="true"/>

Эта директива помечает файл как стандартную библиотеку. Вы увидите этот комментарий в начале файла lib.d.ts и его различных вариантов.

Эта директива инструктирует компилятор не включать стандартную библиотеку (т. е. lib.d.ts) в компиляцию. Влияние здесь аналогично передаче noLib в командной строке.

Также обратите внимание, что при передаче skipDefaultLibCheck компилятор будет пропускать проверку файлов с /// <reference no-default-lib="true"/>.

/// <amd-module />

По умолчанию модули AMD генерируются анонимно. Это может привести к проблемам при использовании других инструментов для обработки полученных модулей, таких как сборщики (например, r.js).

Директива amd-module позволяет передать необязательное имя модуля компилятору:

amdModule.ts
///<amd-module name="NamedModule"/>
export class C {}

Приведёт к присвоению имени NamedModule модулю в качестве части вызова AMD define:

amdModule.js
define("NamedModule", ["require", "exports"], function (require, exports) {
  var C = (function () {
    function C() {}
    return C;
  })();
  exports.C = C;
});

/// <amd-dependency />

Примечание: эта директива устарела. Используйте операторы import "moduleName"; вместо неё.

/// <amd-dependency path="x" /> сообщает компилятору о зависимости от модуля, не являющегося TS, которая должна быть внедрена в вызов require результирующего модуля.

Директива amd-dependency также может иметь необязательную свойство name; это позволяет передать необязательное имя для amd-зависимости:

/// <amd-dependency path="legacy/moduleA" name="moduleA"/>
declare var moduleA: MyType;
moduleA.callStuff();

Сгенерированный код JS:

define(["require", "exports", "legacy/moduleA"], function (
  require,
  exports,
  moduleA
) {
  moduleA.callStuff();
});

© 2012-2023 Microsoft
Licensed under the Apache License, Version 2.0.
https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API