Подтвердить что ты не робот

Должен ли я ссылаться на определение typescript в каждом файле

Есть ли способ сообщить typescript использовать определенный файл (или набор файлов) в качестве определения для всего скомпилированного?

Моя единственная альтернатива в настоящее время заключается в том, чтобы добавить что-то подобное в каждый отдельный файл typescript (который кажется неуклюжим):

/// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
4b9b3361

Ответ 1

При использовании внутренней модульной системы TypeScript вы можете избежать наличия любых тэгов <reference> вообще в коде. Я лично делаю это, потому что я не хочу кодировать пути (реальные или абсолютные) в коде, поскольку я постоянно перемещаю вещи вокруг.

Один из способов сделать это - убедиться, что все необходимые файлы декларации и исходные файлы TypeScript передаются компилятору в качестве аргументов во время компиляции.

Используя gulp вместе с gulp-typescript упрощает эту задачу. Вы можете установить noExternalResolve в gulp-typescript в значение true и создать gulp задачи, которые берут все ваши файлы .d.ts вместе с вашими источниками и передают их в компилятор. Когда вы втягиваете tsd в свой стек, вам нужно передать файл tsd.d.ts, содержащий ссылки на все другие файлы определений, установленные через tsd.

UPDATE для TypeScript >= v1.5: вы можете использовать файл tsconfig.json, и компилятор получит упорядочение классов правильно. Это устраняет необходимость использования gulp-typescript alltogether. Вы можете либо выбрать, что все файлы явно указаны в файле tsconfig.json, либо полностью оставить вне свойства files, чтобы включить все файлы *.ts/*.tsx в каталог, в котором находится tsconfig.json (включая все подпапки).

Образец tsconfig.json может выглядеть так:

{
    "compilerOptions": {
        "target": "ES5",
        "module": "commonjs",
        "lib": [ "es5", "es2015.promise", "dom" ]
    },
    "include": [
        "src/**/*.ts"
    ]
}

Ответ 2

То, что я узнал до сих пор, состоит в том, что ///<reference> -ing module со справочными комментариями не является хорошим методом.

Например: если у вас есть файл Foo и панель файлов. Оба файла используют jquery, но только файл Foo имеет ссылочный комментарий к jquery. Если файл Foo удален по какой-либо причине, ваша панель файлов сломана, потому что ссылка отсутствует.

Если вы используете TypeScript >= 2.0, лучше определить файлы определения TypeScript (.d.ts) в файле tsconfig.json в разделе "файлов.

Это может выглядеть так:

{
  "compileOnSave": true,
  "compilerOptions": {
    "noImplicitAny": true,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5", 
    "outDir": "./Scripts/"
  },
  "files": [
    "./src/foo.ts",
    "./src/bar.ts",
    "./Scripts/typings/jquery/jquery.d.ts",
    "./Scripts/typings/jqueryui/jqueryui.d.ts",
    "./Scripts/MicrosoftMaps/Microsoft.Maps.d.ts"
  ]
}

Использование директивы///(справочные комментарии) часто используется в примерах, чтобы вы начали быстро, но это не лучшая практика. Также многие примеры взяты из версии < TypeScript 2.0.

Ответ 3

Некоторые IDE автоматически обнаруживают все файлы в проекте (Visual Studio).

Для всего остального вы можете создать файл _references.ts и поместить туда все свои ссылочные комментарии - тогда вам нужно только добавить:

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

... для каждого файла (а не, возможно, много).

Ваша IDE может также поддерживать файлы tsconfig.

Ответ 4

Этот вопрос является дубликатом ссылок typescript в одном файле вместо всех файлов JS?

В ответ на этот вопрос добавьте каждый файл, который вы хотите ссылаться на раздел "файлы" файла tsconfig.json. Это еще много строк, но все в одном файле.

В будущем, когда выйдет Typescript 2, вы можете использовать раздел "filesGlob" и решить проблему в двух строках.

Ответ 5

Я недавно начал работу с TypeScript, и, поскольку я понял, что внутреннее решение модулей - это да, вы можете скомпилировать все .ts файлы из каталога tsconfig.json и всех его подкаталогов при условии, t установили в него .ts файлы без /// <references path="" />.

Но порядок, в котором файлы .ts скомпилированы в результирующие файлы .js, не определяется зависимостями, которые имеют файлы (или классы). Таким образом, возможно иметь ситуацию, когда дочерний класс компилируется до родительского (ребенок наследует от родительского отношения). Тогда код не будет запущен, хотя он скомпилирован успешно. Он будет жаловаться, что он не может понять родительский класс внутри дочернего класса. Поэтому вам нужно добавить /// <references path="" /> в качестве подсказки для компилятора для разрешения зависимостей между .ts файлами.

Это требует, чтобы в документации TypeScript говорилось:

Директива///является наиболее распространенной из этой группы. Он служит объявлением зависимости между файлами.

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

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