===== Структура tsconfig ===== Рассмотрим структуру и некоторые особенности конфига. * ''tsconfig.json'' состоит из двух частей. Какие-то опции необходимо указывать в ''root'', а какие-то в ''compilerOptions'' * ''tsconfig.json'' поддерживает комментарии. Такие IDE как WebStorm и Visual Studio Code знают об этом и не выделяют комментарии как синтаксическую ошибку * ''tsconfig.json'' поддерживает наследование. Опции можно разделить по некоторому принципу, описать их в разных файлах и объединить с помощью специальной директивы Это болванка нашего ''tsconfig.json'': { // extends позволяет обогатить опции другими опциями из указанного файла // файлом tsconfig-checks.json займёмся во второй части статьи "extends": "./tsconfig-checks.json", // в корне конфига находятся project-specific опции "compilerOptions": { // здесь все настройки, связанные с компилятором } } К ''root'' опциям относится только следующие: ''extends'', ''files'', ''include'', ''exclude'', ''references'', ''typeAcquisition''. Из них мы будем рассматривать первые 4. Все остальные опции размещаются в ''compilerOptions''. Иногда в ''root'' секции конфига можно встретить такие опции как ''compileOnSave'' и ''ts-node''. Эти опции не являются официальными и используются IDE для своих целей. ===== Секция root ===== ==== extends ==== **Type: string | false, default: false.** Указывает путь к файлу из которого нужно унаследовать опции. По большей части, служит инструментом упорядочивания. Можно разделить опции по некой логике, чтобы они не смешивались. Например, вынести настройки строгости в отдельный файл, как в примере болванки конфига. Однако, учитывая поддержку комментариев в ''tsconfig.json'' это можно сделать проще: { "compilerOptions": { // блок базовых настроек // блок настроек строгости } } Рассмотрим другой use-case, где комментариями отделаться не получится. Если необходимо создать production и development конфиги. Так бы мог выглядеть ''tsconfig-dev.json'' версия конфига: { "extends": "./tsconfig.json", "compilerOptions": { // переопределяем настройки, которые нужны только для dev режима "sourceMap": true, "watch": true } } В целом, я рекомендую пользоваться ''extends''. Однако, сильно дробить настройки не рекомендую. Это может привести к запутыванию. В том числе по причине того, что множественное наследование не поддерживается. Если вы решите использовать эту опцию. То увидеть итоговую, объединённую версию конфига поможет команда ''tsc --showConfig''. ==== files ==== **Type: string[] | false, default: false, связана с** ''include''**.** Указать список конкретных файлов для компиляции можно использовав данную опцию. { "compilerOptions": {}, "files": [ "core.ts", "app.ts" ] } Данная опция подходит лишь для совсем маленьких проектов из нескольких файлов. ==== include ==== **Type string[], default: зависит от значения** ''files''**, связана с** ''exclude''**.** Если опция ''files'' не указана, то TypeScript будет использовать эту директиву для поиска компилируемых файлов. Если ''include'' так же не указана, то её значение будет неявно объявлено как ''["%%**/*%%"]''. Это означает, что поиск файлов будет осуществляться во всех папках и их подпапках. Такое поведение не оптимально, поэтому в целях производительности лучше всегда указывать конкретные пути. Можно прописывать как пути к конкретным файлам, так и паттерны путей. { "compilerOptions": {}, "include": [ "src/**/*", "tests/**/*" ] } Если паттерны не указывают конкретных расширений, то TypeScript будет искать файлы с расширениями ''.ts'', ''.tsx'' и ''.d.ts''. А если включен флаг ''allowJs'', то ещё ''.js'' и ''.jsx''. Следующие форматы записей делают одно и тоже ''src'', ''./src'', ''src%%/**/*%%''. Я предпочитаю вариант ''./src''. Технически, используя опции ''include'' и ''exclude'', TypeScript сгенерирует список всех подходящих файлов и поместит их в ''files''. Это можно наблюдать если выполнить команду ''tsc --showConfig''. ==== exclude ==== **Type: string[], default: ["node_modules", "bower_components", "jspm_packages"].** Директива служит для того, чтобы исключать некоторые лишние пути или файлы, которые включились директивой ''include''. По умолчанию, опция имеет значение путей пакетных менеджеров ''npm'', ''bower'' и ''jspm'', так как модули в них уже собраны. Помимо этого, TypeScript будет так же игнорировать папку из опции ''outDir'', если она указана. Это папка, куда помещаются собранные артефакты сборки. Логично, что их нужно исключить. Если добавить свои значения в эту опцию, то необходимо не забыть восстановить умолчания. Так как пользовательские значения не объединяются со значениями по умолчанию. Другими словами, необходимо вручную указать корень модулей своего пакетного менеджера. { "compilerOptions": {}, "exclude": [ "node_modules", "./src/**/*.spec.ts" ] } Опция ''exclude'' не может исключить файлы, указанные через ''files''. Опция ''exclude'' не может исключить файлы, если они импортируются в других файлах, которые не исключены. ===== Секция compilerOptions ===== ==== target ==== **Type: string, default:** ''ES3''**, влияет на опции** ''lib''**,** ''module''**.** Версия стандарта ECMAScript, в которую будет скомпилирован код. Здесь большой выбор: ''ES3'', ''ES5'', ''ES6'' (он же ''ES2015''), ''ES2016'', ''ES2017'', ''ES2018'', ''ES2019'', ''ES2020'', ''ESNext''. Для backend приложений/пакетов подойдёт ''ES6'', если рассчитываете только на современные версии ''Node.js'' и ''ES5'', если хотите поддержать более старые версии. На данный момент стандарт ''ES6'', с небольшими оговорками, поддерживается [[https://caniuse.com/es6|97.29% браузеров]]. Так что для frontend приложений ситуация аналогичная. ==== module ==== **Type: string, default: зависит от** ''target''**, влияет на опцию** ''moduleResolution''**.** Модульная система, которую будет использовать ваше собранное приложение. На выбор: ''None'', ''CommonJS'', ''AMD'', ''System'', ''UMD'', ''ES6'', ''ES2015'', ''ES2020'' или ''ESNext''. Для backend приложений/пакетов подойдёт ''ES6'' или ''CommonJS'' в зависимости от версий ''Node.js'', которые хотите поддерживать. Для frontend приложений под современные браузеры также подходит ''ES6''. А для поддержки более старых браузеров и для изоморфных приложений, определённо стоит выбрать ''UMD''. Если ваша ситуация не такая простая или хотите знать все тонкости модульных систем, тогда придётся всё-таки изучить [[https://www.typescriptlang.org/docs/handbook/modules.html|подробную документацию]]. ==== moduleResolution ==== **Type: string, default: зависит от** ''module''**.** Стратегия, которая будет использоваться для импорта модулей. Здесь всего две опции: ''node'' и ''classic''. При этом ''classic'' в 99% не будет использоваться, так как это legacy. Однако, я специально упомянул этот флаг, так как он меняется в зависимости от предыдущего флага. При изменении значения ''module'' режим ''moduleResolution'' может переключиться на ''classic'' и в консоли начнут появляться сообщения об ошибках на строчках с импортами. Во избежание описанной ситуации, я рекомендую всегда явно указывать значение ''node'' для данного флага. ==== lib ==== **Type: string[], default: зависит от** ''target''**.** В зависимости от того какой ''target'' установлен в конфиге, TypeScript подключает тайпинги (''*.d.ts-файлы'') для поддержки соответствующих спецификаций. Например, если ваш ''target'' установлен в ''ES6'', то TypeScript подключит поддержку ''array.find'' и прочих вещей, которые есть в стандарте. Но если ''target'' стоит ''ES5'', то использовать метод массива ''find'' нельзя, так как его не существует в этой версии JavaScript. Можно подключить полифилы. Однако, для того, чтобы TypeScript понял, что теперь данную функциональность можно использовать, необходимо подключить необходимые тайпинги в секции ''lib''. При этом, можно подключить как весь стандарт ''ES2015'', так и его часть ''ES2015.Core'' (только методы ''find'', ''findIndex'' и т. д.). Конечно, правильным выбором будет подключать тайпинги только той функциональности, для которой установлены полифилы. Для --target ES5 подключаются: DOM, ES5, ScriptHost Для --target ES6: DOM, ES6, DOM.Iterable, ScriptHost Как только вы что-либо добавляете в ''lib'' умолчания сбрасываются. Необходимо руками добавить то, что нужно, например ''DOM'': { "compilerOptions": { "target": "ES5", "lib": [ "DOM", "ES2015.Core" ] } } ==== outDir ==== **Type: string, default: равняется корневой директории.** Конечная папка, куда будут помещаться собранные артефакты. К ним относятся: ''.js'', ''.d.ts'', и ''.js.map'' файлы. Если не указывать значение для данной опции, то все вышеуказанные файлы будут повторять структуру исходных файлов в корне вашего проекта. В таком случае будет сложно удалять предыдущие билды и описывать ''.gitignore'' файлы. Да и кодовая база будет похожа на свалку. Советую складывать все артефакты в одну папку, которую легко удалить или заигнорировать системой контроля версий. Если оставить опцию ''outDir'' пустой: ├── module │ └── core.js │ └── core.ts ├── index.js └── index.ts Если указать ''outDir'': ├── dist │ └── module │ | └── core.js │ └── index.js ├── module │ └── core.ts └── index.ts ==== outFile ==== **Type: string, default: none.** Судя по описанию, данная опция позволяет объединить все файлы в один. Кажется, что бандлеры вроде ''webpack'' больше не нужны… Однако, опция работает только если значение ''module'' указано ''None'', ''System'' или ''AMD''. К огромному сожалению, опция не будет работать с модулями ''CommonJS'' или ''ES6''. Поэтому скорее всего использовать ''outFile'' не придётся. Так как опция выглядит максимально привлекательно, но работает не так как ожидается, я решил предупредить вас об этом гигантском подводном камне. ==== allowSyntheticDefaultImports ==== **Type: boolean, default: зависит от** ''module'' **или** ''esModuleInterop''**.** Если какая-либо библиотека не имеет ''default import'', лоадеры вроде ''ts-loader'' или ''babel-loader'' автоматически создают их. Однако, ''d.ts-файлы'' библиотеки об этом не знают. Данный флаг говорит компилятору, что можно писать следующим образом: // вместо такого импорта import * as React from 'react'; // можно писать такой import React from 'react'; Опция включена по умолчанию, если включен флаг ''esModuleInterop'' или ''module'' %%===%% "system". ==== esModuleInterop ==== **Type: boolean, default: false.** За счёт добавления болерплейта в выходной код, позволяет импортировать ''CommonJS'' пакеты как ''ES6''. // библиотека moment экспортируется только как CommonJS // пытаемся импортировать её как ES6 import Moment from 'moment'; // без флага esModuleInterop результат undefined console.log(Moment); // c флагом результат [object Object] console.log(Moment); Данный флаг по зависимости активирует ''allowSyntheticDefaultImports''. Вместе они помогают избавиться от зоопарка разных импортов и писать их единообразно по всему проекту. ==== alwaysStrict ==== **Type: boolean, default: зависит от** ''strict''**.** Компилятор будет парсить код в ''strict mode'' и добавлять ''“use strict”'' в выходные файлы. По умолчанию false, но если включен флаг ''strict'', то true. ==== downlevelIteration ==== **Type: boolean, default: false.** Спецификация ''ES6'' добавила новый синтаксис для итерирования: цикл ''for / of'', ''array spread'', ''arguments spread''. Если код проекта преобразовывается в ''ES5'', то конструкция с циклом ''for / of'' будет преобразована в обычный ''for'': // код es6 const str = 'Hello!'; for (const s of str) { console.log(s); } // код es5 без downlevelIteration var str = "Hello!"; for (var _i = 0, str_1 = str; _i < str_1.length; _i++) { var s = str_1[_i]; console.log(s); } Однако, некоторые символы, такие как ''emoji'' кодируются с помощью двух символов. Т. е. такое преобразование в некоторых местах будет работать не так, как ожидается. Включенный флаг ''downlevelIteration'' генерирует более многословный и более "правильный", но менее производительный код. Код получается действительно очень большим, поэтому не буду занимать место на экране. Если интересно посмотреть пример, то перейдите в [[https://www.typescriptlang.org/play?#code/MYewdgzgLgBNBOMC8MBEAJApgG2yAhKgNwBQAZiIgBSiSwQwhlxTwCUMA3iTDLRCGyYAdHgDmVCG1IBfIA|playground]] и выберете в настройках ''target -> es5'', ''downlevelIteration -> true''. Для работы данного флага, необходимо, чтобы в браузере была реализация ''Symbol.iterator''. В противном случае необходимо установить полифил. ==== forceConsistentCasingInFileNames ==== **Type: boolean, default: false.** Включает режим чувствительности к регистру (case-sensitive) для импорта файлов. Таким образом, даже в case-insensitive файловых системах при попытке сделать импорт ''import FileManager from './FileManager.ts''', если файл в действительности называется ''fileManager.ts'', приведёт к ошибке. Перестраховаться лишний раз не повредит. TypeScript - это про строгость. ===== Опции секции compilerOptions, которые нужны не в каждом проекте ===== ==== declaration ==== **Type: boolean, default: false.** С помощью включения данного флага, помимо JavaScript файлов, к ним будут генерироваться файлы-аннотации, известные как ''d.ts''-файлы или тайпинги. Благодаря тайпингам становится возможным определение типов для уже скомпилированных js файлов. Другими словами код попадает в ''js'', а типы в ''d.ts''-файлы. Это полезно в случае, например, если вы публикуете свой пакет в ''npm''. Такой библиотекой смогут пользоваться разработчики, которые пишут как на чистом JavaScript, так и на TypeScript. ==== declarationDir ==== **Type: string, default: none, связан с** ''declaration''**.** По умолчанию тайпинги генерируются рядом с ''js''-файлами. Используя данную опцию можно перенаправить все ''d.ts''-файлы в отдельную папку. ==== emitDeclarationOnly ==== **Type: boolean, default: false, связан с** ''declaration''**.** Если по какой-то причине вам нужны только ''d.ts''-файлы, то включение данного флага предотвратит генерацию ''js''-файлов. ==== allowJs ==== **Type: boolean, default: false.** Портировать ваш JavaScript проект на TypeScript поможет данный флаг. Активировав ''allowJs'' TypeScript компилятор будет обрабатывать не только ''ts'' файлы, но и ''js''. Нет нужды полностью мигрировать проект, прежде чем продолжить его разработку. Можно это делать файл за файлом, просто меняя расширение и добавляя типизацию. А новый функционал сразу можно писать на TypeScript. ==== checkJs ==== **Type: boolean, default: false, связан с** ''allowJs''**.** TypeScript будет проверять ошибки не только в ''ts'', но и в ''js''-файлах. Помимо встроенных тайпингов для языковых конструкций JavaScript, TS-компилятор так же умеет использовать jsDoc для анализа файлов. Я предпочитаю не использовать этот флаг, а наводить порядок в коде в момент его типизации. Однако, если в вашем проекте хорошее покрытие кода jsDoc, стоит попробовать. С версии 4.1 при включении ''checkJs'', флаг ''allowJs'' включается автоматически. ==== experimentalDecorators и emitDecoratorMetadata ==== **Type: boolean, default: false.** ''Декоратор'' - это стандартный паттерн из мира ООП и его можно реализовывать классическим образом, создавая классы или функции-обёртки. Однако, с помощью двух вышеперечисленных флагов можно включить экспериментальный синтаксис декораторов. Данный синтаксис позволяет декорировать классы, их методы и свойства, модификаторы доступа, а так же аргументы функций используя простой и распространённый во многих языках программирования [[https://refactoring.guru/ru/design-patterns/decorator|синтаксис]] ''@''. Флаг ''experimentalDecorators'' просто активирует синтаксис, а ''emitDecoratorMetadata'' в рантайме предоставляет декораторам дополнительные мета-данные, с помощью которых можно значительно расширить области применения данной фичи. Для работы ''emitDecoratorMetadata'' необходимо подтянуть в проект библиотеку [[https://github.com/rbuckton/reflect-metadata|reflect-metadata]]. ==== resolveJsonModule ==== **Type: boolean, default: false.** Флаг позволяет включить возможность импортировать ''*.json'' файлы. Ничего дополнительно устанавливать не требуется. // необходимо указывать расширение .json import config from './config.json' ==== jsx ==== **Type: string, default: none.** Если проект использует React, необходимо включить поддержку ''jsx''. В подавляющем большинстве случаев будет достаточно опций ''react'' или ''react-native''. Так же есть возможность оставить ''jsx-код'' нетронутым с помощью опции ''preserve'' или использовать кастомные преобразователи ''react-jsx'' и ''react-jsxdev''. ===== Завершение первой части ===== В этой статье я расписал самые важные флаги и опции, которые могут понадобиться в подавляющем большинстве проектов. В следующей же части я расскажу про настройку строгости компилятора. UPD: Здесь можно прочитать [[https://habr.com/ru/post/557738/|вторую часть статьи]]. =====tsconfig.json===== ====config==== // Файл "tsconfig.json": // - устанавливает корневой каталог проекта TypeScript; // - выполняет настройку параметров компиляции; // - устанавливает файлы проекта. // Присутствие файла "tsconfig.json" в папке указывает TypeScript, что это корневая папка проекта. // Внутри "tsconfig.json" указываются настройки компилятора TypeScript и корневые файлы проекта. // Программа компилятора "tsc" ищет файл "tsconfig.json" сначала в папке, где она расположена, затем поднимается выше и ищет в родительских папках согласно их вложенности друг в друга. // Команда "tsc --project C:\path\to\my\project\folder" берет файл "tsconfig.json" из папки, расположенной по данному пути. // Файл "tsconfig.json" может быть полностью пустым, тогда компилятор скомпилирует все файлы с настройками заданными по умолчанию. // Опции компилятора, перечисленные в командной строке перезаписывают собой опции, заданные в файле "tsconfig.json". { "extends": "./configs/base", // Загрузить другой конфигурационный файл "tsconfig.json", взятый за основу, и перезаписать его значениями из секций ниже. "compileOnSave": true, // При значении true указывает используемой редактору кода производить компиляцию при каждом сохранении файлов TypeScript. Поддерживается не всеми редакторами кода. "compilerOptions": { // Настраивает параметры компиляции. Параметры называются также, как и в командной строке. // Основные настройки. // Настройки путей для создания выходных файлов. "module": "amd", // Определяет тип импорта кода в итоговом файле, прописанном в "outFile". Необходимо задавать при использовании опции "outFile". "outFile": "./build/bundle.js", // Имя единого итогового выходного файла, в который будут помещен код из всех найденных TypeScript-файлов. "outDir": "./build", // Поместить все скомпилированные файлы в данную папку, согласно их вложенности в исходниках. Если задана опция "outFile", то опция "outDir" будет проигнорирована. // Если "outFile" и "outDir" не заданы, то выходные файлы будут созданы рядом со своими исходниками. // Настройки для поиска @types "typeRoots": [ // По умолчанию все видимые в проекте пакеты "@types", расположенные в папках "node_modules" на всех уровнях вложенности, используются при компиляции. // Но, если указан массив "typeRoots", тогда при компиляции будут использованы только описания типов, найденные в папках, расположенных по перечисленным в нем путях. // При этом описания типов, находящихся в других папках использованы не будут. // Папки с пакетами описаний типов обычно содержат внутри себя файл "index.d.ts" или "package.json" со свойством "types". "./typings" // При компиляции будут использованы только файлы описания типов ".d.ts" находящиеся в этой папке. ], "types": ["node", "lodash", "express"], // Если указан параметр "types", то из всех найденных будут использованы только те описания типов, что указаны в его массиве, а именно: "./typings/node", "./typings/lodash", "./typings/express". // Другие найденные типы использоваться не будут. // Задание "types": [] приведет к отключению автоматического использования описаний типов из папок "@types". "rootDir": "../src", // Путь до папки с которой надо начинать поиск входных файлов. Обычно корневая директория вычисляется по списку входных файлов. Данная опция необходима для проверки, что все найденные TypeScript-файлы находятся внутри корневой папки. "rootDirs": [ // Список корневых папок, совокупный контент которых представляет структуру проекта для компиляции. "src/views", "generated/templates/views" ], "baseUrl": ".", // Путь до базовой папки для поиска не относительных путей до файлов. "build": false, // TODO "composite": true, // TODO "paths": { // Укажите сопоставление маршрутов для вычисления по сравнению с параметром baseUrl. "jquery": ["node_modules/jquery/dist/jquery"] // Путь относительно "baseUrl". }, "lib": ["es5", "es6", "es2015.promise", "es2016.array.include"], // Набор библиотечных файлов полифилов, которые будут включены в итоговый выходной файл. "jsx": "react", // Включать ли поддержку ".tsx" файлов? "jsxFactory": "React.createElement", // Укажите фабричную функцию JSX, чтобы использовать, когда таргетинг реагирует на обработку JSX, например: 'React.createElement' или 'h'. Требуется TypeScript версии 2.1 или новее. "allowJs": false, // Разрешать компилировать файлы с JavaScript-кодом? "alwaysStrict": false, // Компилировать ли каждый файл в строгом режиме и создавать ли 'use strict' для каждого выходного файла? Требуется TypeScript версии 2.1 или новее. "checkJs": false, // Сообщить об ошибках в .js-файлах? Используйте совместно с "allowJs". "downlevelIteration": false, // Обеспечьте полную поддержку итераций для for - in, ..., деструктуризации при настройке на ES5 или ES3? "importHelpers": false, // Имортировать созданные хелперы (__extends, __rest и так далее) из "tslib". "noEmitOnError": true, // Не создавать итоговый файл, если во время компиляции произошла ошибка. "noEmitHelpers": false, // Не помещать в код итогового файла функции хелперы. "noUnusedLocals": true, // Показывать ошибку, если где-то найдены неиспользуемые локальные значения. "noUnusedParameters": true, // Показывать ошибку, если где-то найдены неиспользуемые параметры. "noImplicitUseStrict": false, // Не записывать 'use strict' в итоговый выходной файл? "pretty": true, // Окрашивать в терминале сообщения об ошибках. "removeComments": true, // Удалить все комментарии из итогового файла. "sourceMap": true, // Создавать ли соответствующие source map файлы ".map"? "strict": false, // Включить ли все строги проверки типов сразу: noImplicitAny, noImplicitThis, alwaysStrict, strictNullChecks, strictFunctionTypes, strictPropertyInitialization? "strictNullChecks": false, // Значения "null" и "undefined" могут быть присвоены только значениям данного типа и значениям только с типом "any"? "target": "es3", // Тип кода создаваемого итогового файла. "watch": true, // Запустить компилятор в режиме отслеживания изменений во входных файлах и их повторной компиляции? // Дополнительные настройки. "allowSyntheticDefaultImports": false, // Разрешить импортировать модули не имеющие внутри себя "import default"? "allowUnreachableCode": false, // Сообщить об ошибке в случае обнаружения кода, который никогда не будет выполнен? "allowUnusedLabels": false, // Не создавать сообщений об ошибках, если в коде найдены неиспользуемые метки label? "allowUmdGlobalAccess": false, // TODO "assumeChangesOnlyAffectDirectDependencies": false, // TODO "charset": "utf8", // Кодировка входных файлов. "declaration": false, // Создавать ли соответствующие файлы ".d.ts"? "declarationDir": ".", // Путь до папки, в которую будут записаны созданные соответствующие файлы ".d.ts". "declarationMap": false, // TODO "diagnostics": false, // Показывать ли диагностическую информацию? "disableSizeLimit": false, // Отключить ограничение размера в проекте JavaScript. "emitBOM": false, // Записывать ли UTF-8 Byte Order Mark (BOM) в начало итогового файла? "emitDeclarationOnly": false, // TODO "emitDecoratorMetadata": false, // Создавать метаданные для объявлений декораторов в исходном коде? "esModuleInterop": false, // Создать хелперы __importStar и __importDefault для обеспечения совместимости с экосистемой Babel и включить allowSyntheticDefaultImports для совместимости с системой типов. "experimentalDecorators": false, // Включить экспериментальную поддержку декораторов EcmaScript? "extendedDiagnostics": false, // TODO "forceConsistentCasingInFileNames": false, // Запретить несогласованные ссылки на один и тот же файл? "inlineSources": false, // Помещать ли source в итоговый файл рядом с source map? "inlineSourceMap": false, // Помещать ли source map в итоговый файл, вместо того чтобы иметь отдельный файл с source map? "isolatedModules": false, // Обрабатывать каждый файл, как отдельный изолированный модуль. "listFiles": false, // Печатать ли имена файлов при компиляции? "listEmittedFiles": false, // Печатать список всех выходных файлов при компиляции. Требуется TypeScript версии 2.0 или новее. "mapRoot": ".", // Путь до папки, в которой дебаггер браузера должен будет искать файлы с source map. "maxNodeModuleJsDepth": 0, // Максимальная глубина поиска зависимостей внутри node_modules и загрузки файлов JavaScript. Применяется только вместе с заданной опцией "allowJs". "moduleResolution": "classic", // Определить способ поиска модулей в папках: как в Node.js или классический, как в TypeScript 1.5 и ниже. "newLine": "CRLF", // Определяет тип завершения строк в итоговом файле. "noEmit": false, // Не создавать итоговый файл. "noFallthroughCasesInSwitch": false, // Сообщить об ошибке в случае обнаружения проваливания в конструкции switch-case? "noImplicitAny": false, // Показывать ошибку, если где-то задан тип "any". "noImplicitThis": false, // Показывать ошибку на "this", если где-то задан тип "any". "noImplicitReturns": false, // Сообщить об ошибке, когда не все пути кода в функции возвращают значение? "noLib": false, // Не использовать стандартный библиотечный файл по умолчанию (lib.d.ts). "noResolve": false, // Не добавлять "/// " в список скомпилированных файлов. "noStrictGenericChecks": false, // Отключить строгую проверку типов джинериков в типах функций? "plugins": [], // Список плагинов для сервера языка TypeScript для загрузки. Требуется TypeScript версии 2.3 или новее. "preserveConstEnums": false, // Не удалять объявления const enum из итогового файла. "preserveSymlinks": false, // Не заменять символические ссылки на их реальный путь, обрабатывать символический файл как реальный. "sourceRoot": ".", // Путь до папки, в которой дебаггер должен искать исходные source файлы. "skipLibCheck": false, // Не проверять типы, заданные во всех файлах описания типов (*.d.ts)? "skipDefaultLibCheck": false, // Пропустить проверку типов из стандартной библиотеки по умолчанию? "suppressExcessPropertyErrors": false, // Подавлять избыточные проверки свойств для объектных литералов? "suppressImplicitAnyIndexErrors": false, // Подавлять "noImplicitAny" ошибки для индексирования объектов, не имеющих индексных подписей. "stripInternal": false, // Не создавать объявления для кода, который имеет аннотацию JSDoc /** @internal */. "strictFunctionTypes": false, // Отключить проверку бивариантных параметров для типов функций. "strictPropertyInitialization": false, // Убедитесь, что свойства класса, имеющие значения undefined, получают новые значения внутри конструктора. "traceResolution": false // Выводить в логи сообщения о нахождении путей до модулей. }, "files": [ // Список относительных или абсолютных путей до конкретных исходных файлов, которые обязательно надо скомпилировать. // Если секция "files" не указана, то компилятор по умолчанию включает все файлы с расширением *.ts и *.tsx, которые находятся в корневой папке и внутренних подпапках проекта. // Если секция "files" указана, то скомпилируются файлы, которые в ней перечислены. // Все файлы, на которые есть ссылки в файлах из секции "files", также скомпилируются. "core.ts", "app.ts" ], // Вместе с компиляцией только конкретных исходных файлов можно компилировать только файлы в заданных папках, которые будут найдены через регулярные выражения, которые принимают только следующие значения: // - букву или цифру; // - * - ноль или более любых символов, не включая разделители директорий "/" и "\"; // - ? - один любой символ, не включая разделители директорий "/" и "\"; // - **/ - рекурсивно включить любую подпапку. // Если путь до папки заканчивается так "*" или так ".*", тогда в ней будут скомплированы все файлы с расширениями .ts, .tsx, .d.ts, а также .js и .jsx, если опция "allowJs" будет равна true. "include": [ // Секция "include" позволяет скомпилировать все файлы, находящиеся в заданных папках. // Если секция "files" и секция "include" заданы вместе, то будут скомпилированы только файлы, перечисленные в обеих секциях. // Все файлы, на которые есть ссылки во включенных файлах из секции "files" и секции "include", также скомпилируются. "src/**/*" ], "exclude": [ // Секция "exclude" позволяет исключить при компиляции определенные файлы, которые находятся в заданных папках секции "include" или в папках всего проекта, если секция "include" не задана. // Компилятор не будет учитывать перечисленные в секции "exclude" файлы TypeScript, которые находятся в папках из секции "include". // Однако файлы, заданные в секции "files" будут обязательно скомпилированы. // Если секция "exclude" не указана, то по умолчанию будут исключаться из компиляции все файлы из папок: // - node_modules, // - bower_components, // - jspm_packages, // - файлы из папки, указанной в опции компилятора "outDir". "src/**/*.spec.ts", "node_modules" ] }