Typescript disable error

I have a large typescript file that I've inherited. The compiler has many complaints with this file, however it works just fine. I'll come back to it, but is there any way to suppress all warnings/

I have a large typescript file that I’ve inherited. The compiler has many complaints with this file, however it works just fine.

I’ll come back to it, but is there any way to suppress all warnings/errors in a specific file?

asked Apr 11, 2019 at 12:50

Warrick FitzGerald's user avatar

aviv's user avatar

answered Jan 7, 2020 at 15:53

07mm8's user avatar

4

  • You can suppress errors in .ts files using // @ts-ignore comments
    for lines
  • or use // @ts-nocheck after version 3.7 for the whole file.

answered Apr 11, 2019 at 12:54

makeitmorehuman's user avatar

makeitmorehumanmakeitmorehuman

11k3 gold badges52 silver badges76 bronze badges

3

This is a little known trick. 2 steps:

  1. add this triple slash comment to the top of your file
/// <reference no-default-lib="true"/>
  1. toggle this option:
{
  "compilerOptions": {
    "skipDefaultLibCheck": true
  }
}

Side note, as of 2019.4.11, skipDefaultLibCheck option is marked as DEPRECATED in the doc, but the feature still exists in source code, see this line.

answered Apr 11, 2019 at 13:18

hackape's user avatar

hackapehackape

17.8k2 gold badges27 silver badges57 bronze badges

3

You could also use loose-ts-check to filter out and ignore some or all TypeScript errors in specific files.

It’s used like this after initial setup:

tsc --noEmit | npx loose-ts-check

answered Mar 28, 2022 at 14:05

Qtax's user avatar

QtaxQtax

32.9k9 gold badges80 silver badges119 bronze badges

The TypeScript compiler is excellent at showing errors and warning when it detects something is wrong with the code. Sometimes, however, a developer may want to ignore an error on the next line AND still compile the code. Luckily, this is simple to achieve in TypeScript.

To ignore a compiler error on the next line in TypeScript, you can use the @ts-ignore rule, like so:

typescriptif (false) {
    // @ts-ignore
    console.log("unreachable code");
}

This article will go through everything on ignoring compiler errors and warnings in TypeScript and answer some common questions.

Let’s get to it 😎.

Page content

  1. How to ignore an error with @ts-ignore?
  2. How to ignore an error with @ts-expect-error?
  3. @ts-ignore vs. @ts-expect-error
  4. How to ignore all TypeScript compiler errors on a file?
  5. Final thoughts

In TypeScript, you can ignore compiler errors by adding a TypeScript directive comment above the line with the error you want to silence.

To silence TypeScript errors, multiple types of comments exist:

  • @ts-ignore
  • @ts-expect-error
  • @ts-nocheck

How to ignore an error with @ts-ignore?

The @ts-ignore comment allows suppressing an error on the next line.

Here is an example of how to use the @ts-ignore comment:

typescriptwhile(true) {
    console.log('a');
}

// @ts-ignore
console.log('b')

Read: The while loop in TypeScript

In this example, the second console.log is unreachable.

With the @ts-ignore directive comment, we silence this error.

How to ignore an error with @ts-expect-error?

The @ts-expect-error comment was introduced in TypeScript version 3.9.

It has the same behavior as the @ts-ignore comment, but with one difference.

The @ts-expect-error comment suppresses the next line error just like the @ts-ignore comment.

However, if there is no error to suppress, the compiler shows a warning that the directive is unnecessary.

Here is the same code example as above, but this time it uses a @ts-expect-error:

typescriptwhile(true) {
    console.log('a');
}

// @ts-expect-error
console.log('b')

In this example, we silence the «Unreachable code detected» error.

The behavior of the directive

In this example, the @ts-expect-error comment suppresses the error:

typescript// @ts-expect-error
console.log(20 * "Tim");

And here, the TypeScript compiler outputs an error:

typescript// @ts-expect-error
console.log(20*20);

Here, the code is valid, and the @ts-expect-error directive is unnecessary.

The TypeScript compiler outputs an «Unused ‘@ts-expect-error’ directive.» error.

@ts-ignore vs. @ts-expect-error

Since both comments suppress errors, it can be hard to choose between them.

Use @ts-expect-error when:

  • You are writing test code.
  • You expect a fix to be coming soon.
  • You have a smaller project.

Use @ts-ignore when:

  • You have a larger project.
  • You are switching between TypeScript versions.
  • You don’t know which one to choose.

How to ignore all TypeScript compiler errors on a file?

To ignore all TypeScript compiler errors of a file, add a @ts-nocheck comment at the top of the file.

Here is an example of how to accomplish it:

typescript// @ts-nocheck

if (false) {
    console.log("unreachable code");
}

This comment will silence all the errors in the file outputted by the TypeScript compiler.

Final thoughts

As you can see, ignoring TypeScript compiler errors is simple.

However, carefully consider and verify that you need it before doing so.

Usually, the TypeScript compiler shows errors for reasons, and you should only silence errors when you are 100% sure of what you are doing.

A code base should have a minimum number of TypeScript directive comments.

Since suppressing errors reduces TypeScript effectiveness, some teams implement a special Eslint rule (called ban-ts-comment) to disallow all TypeScript directive comments.

typescript ignore next line

Here are some other TypeScript tutorials for you to enjoy:

  • Exclamation mark operator in TypeScript
  • Declare class constants in TypeScript
  • Export a function in TypeScript

Tim Mouskhelichvili

written by:

Hello! I am Tim Mouskhelichvili, a Freelance Developer & Consultant from Montreal, Canada.

I specialize in React, Node.js & TypeScript application development.

If you need help on a project, please reach out, and let’s work together.

Опции компилятора¶

Если сравнить компилятор tsc с фортепиано, то его опции сопоставимы с камертоном, позволяющим настроить его наилучшим образом, что на практике означает — сократить время сборки и повысить типобезопасность проекта.

strict¶

--strict — активирует все флаги, входящие в группировку строгого режима и сопутствующие повышению типобезопасности программы. На данный момент флаг strict активирует следующие опции компилятора: --strictNullChecks, --noImplicitAny, --noImplicitThis, --alwaysStrict, --strictFunctionTypes, --strictPropertyInitialization и --strictBindCallApply. Несмотря на то, что флаг strict активирует сразу все указанные флаги, при желании конкретные флаги можно отключить.

{
  "compilerOptions": {
      "strict": false,
      "strictNullChecks": false
  }
}

type: boolean
default: false
values: true, false

suppressExcessPropertyErrors¶

--suppressExcessPropertyErrors — если данная опция активна, то компилятор перестает проверять литералы объекта на излишние члены.

{
  "compilerOptions": {
      "suppressExcessPropertyErrors": false
  }
}

type: boolean
default: false
values: true, false

Пример

interface T1 {
  f1: number;
}

let v1: T1 = { f1: 0, f2: '' }; // suppressExcessPropertyErrors === false ? Error : Ok

suppressImplicitAnyIndexErrors¶

--suppressImplicitAnyIndexErrors — при активной опции --noImplicitAny подавляет ошибки, связанные с добавлением динамических свойств в объекты, у которых отсутствует индексное определение.

{
  "compilerOptions": {
      "suppressImplicitAnyIndexErrors": false
  }
}

type: boolean
default: false
values: true, false

Пример для неактивной опции

// tsconfig.json

{
  "compilerOptions": {
      "noImplicitAny": true,
      "suppressImplicitAnyIndexErrors": false
  }
}
// index.ts

interface Member {}
interface IndexMember {
  [key: string]: any;
}

let memberObject: Member = {};
memberObject['name'] = 'object'; // Error

let indexMemeberObject: IndexMember = {};
indexMemeberObject['name'] = 'object'; // Ok

Пример для активной опции

// tsconfig.json

{
  "compilerOptions": {
      "noImplicitAny": true,
      "suppressImplicitAnyIndexErrors": false
  }
}
// index.ts

interface Member {}
interface IndexMember {
  [key: string]: any;
}

let memberObject: Member = {};
memberObject['name'] = 'object'; // Ok

let indexMemeberObject: IndexMember = {};
indexMemeberObject['name'] = 'object'; // Ok

noImplicitAny¶

--noImplicitAny — при активной опции выводит ошибку, если вывод типов установил принадлежность типа члена к any.

{
  "compilerOptions": {
      "noImplicitAny": false
  }
}

type: boolean
default: false
values: true, false

Пример с неактивной опцией

let v1; // Ok

function f1(p1) {
  // Ok
  let v1; // Ok

  return p1;
}

type T2 = { f1 }; // Ok

interface IT1 {
  f1; // Ok
}

class T1 {
  public f1; // Ok
}

Пример с активной опцией

let v1; // Ok

function f1(p1) {
  // Parameter 'p1' implicitly has an 'any' type.
  let v1; // Ok

  return p1;
}

type T2 = { f1 }; // Member 'f1' implicitly has an 'any' type

interface IT1 {
  f1; // Member 'f1' implicitly has an 'any' type
}

class T1 {
  public f1; // Member 'f1' implicitly has an 'any' type
}

checkJs¶

--checkJs — данная опция говорит компилятору, что код, который находится в файлах с расширением .js, также нужно проверять на ошибки. При этом можно исключить определенные файлы из проверки, добавив им строку // @ts-nocheck. Или наоборот, можно попросить компилятор проверить только помеченные как // @ts-check файлы без активации опции --checkJs. К тому же, можно игнорировать ошибки на конкретных строках, указав // @ts-ignore: error message предыдущей строке.

{
  "compilerOptions": {
      "checkJs": false
  }
}

type: boolean
default: false
values: true, false

Кроме этого, при активной опции --checkJS компилятору с помощью аннотации /** @type {...} */ можно указывать типы прямо в файлах с расширением .js.

При использовании JavaScript в TypeScript коде нарушается типобезопасность программы.

// file sum.js

export function sum(a, b) {
  return a + b;
}
// file index.ts

import { sum } from './sum.js';

let n = sum('5', 5); // len n: any, кроме того, результат выполнения функции будет неверным

Но это можно исправить с помощью специальной аннотации, которая располагается в JavaScript коде.

// file sum.js

/** @type {(a:number,b:number) => number)} */
export function sum(a, b) {
  return a + b;
}
// file index.ts

import { sum } from './sum.js';

let n0 = sum('5', 5); // Error
let n1 = sum(5, 5); // Ok, let n1: number

JSX¶

--jsx — данная опция указывает компилятору, какое расширение указывать .tsx файлам после компиляции. Все дело в том, что у React существует два вида приложений, одни создаются для веб-платформ, другие для мобильных платформ. Кроме того, файлы для веб-платформ на входе должны иметь расширение .jsx, в то время как для мобильной платформы — .js. Поэтому компилятору нужно указывать, в какой именно формат преобразовывать файлы с расширением .tsx.

При указании "react" в качестве значения опции --jsx компилятор преобразует .tsx в .jsx файлы, которые затем компилируются в .js. Если в качестве значения будет указано "preserve", то компилятор преобразует .tsx в .jsx, которые сохраняют XML-подобный синтаксис. Если указать значение "react-native", то компилятор преобразует файлы .tsx в требующийся .js.

{
  "compilerOptions": {
      "jsx": "react" | "react-native" | "preserve"
  }
}

type: string
default: preserve
values: react, react-native, preserve

jsxFactory¶

--jsxFactory — данная опция позволяет при трансляции файлов .tsx в .js переопределить фабрику рендера.

// default

// from file .tsx

import * as React from 'react';

<h1>Ok</h1>;
// to file .js

'use strict';
exports.__esModule = true;
var React = require('react');
React.createElement('h1', null, 'Ok');

Установив желаемое значение текущей опции появляется возможность переопределить функцию рендера React на любую другую.

// set options jsxFactory to dom

// from file .tsx

import dom from 'dom';

<h1>Ok</h1>;
// set options jsxFactory to dom

// to file .js

'use strict';
/** @jsx renderer */
exports.__esModule = true;
var dom = require('dom');
dom['default']('h1', null, 'Ok');

Кроме того, подобного поведения можно добиться при помощи нотации /** @jsx identifier */, которая указывается в начале файла, а вместо identifier вписывается имя функции рендера.

// from file .tsx

/** @jsx renderer */

import renderer from 'renderer';

<h1>Ok</h1>;
// to file .js

'use strict';
/** @jsx renderer */
exports.__esModule = true;
var renderer = require('renderer');
renderer['default']('h1', null, 'Ok');

Помимо этого, аннотация /** jsx identifier */ позволяет переопределить функцию рендера, переопределенную с помощью опции --jsxFactory.

{
  "compilerOptions": {
      "jsxFactory": "React.createElement"
  }
}

type: string
default: React.createElement
values: "*"

target (t)¶

--target, или сокращенно -t — указывает компилятору, с какой версией спецификации должен быть совместим генерируемый JavaScript код. По умолчанию установлена совместимость с ES3. Кроме того, можно указывать совместимость с ES5, ES2015 (она же ES6), ES2016, ES2017, ESNext. Стоит добавить, что ESNext равноценно latest version.

{
  "compilerOptions": {
        "target": "es3"
  }
}

type: string
default: es3
values: es3, es5, es6 / es2015, es2016, es2017, esnext

extends¶

extends — с помощью этого свойства можно расширять конфигурацию tsconfig.json.

// tsconfig.base.json

{
  "compilerOptions": {
      "target": "es2015"
  }
}
// tsconfig.json

{
  "extends": "./tsconfig.base.json"
}

type: string
default: ""
values: *

Кроме того, при использовании механизма расширения (extends) поиск файла конфигурации taconfig.json может осуществляться по пакетам (packages) NodeJS модулей, находящихся в директории node_modules.

// tsconfig.json

{
  "extends": "some-npm-module"
}

// or

{
  "extends": "some-npm-module/some-tsconfig.json"
}

Алгоритм разрешения аналогичен алгоритму поиска модулей самого NodeJS. Проще говоря, если путь, указанный в качестве значения атрибута extends, не будет найден в директории node_modules, находящейся в текущей директории, то поиск продолжится в директории node_modules вверх по дереву. Но есть одна особенность, которая заключается в том, что при разрешении пути компилятор tsc, зайдя в директорию node_modules, сначала проверяет package.json на наличие атрибута tsconfig, которому в качестве значения указывают путь до конфигурационного файла. Если атрибут tsconfig найден, то конфигурация, на которую он ссылается, будет установлена в качестве расширяемой. Если package.json не содержит атрибут tsconfig, то в качестве расширяемого конфигурационного файла будет выбран файл tsconfig.json, находящийся в корне директории. Если в корне директории файла tsconfig.json найдено не будет, то поиск продолжится вверх по дереву.

/project
    /node_modules
        /some-module
            package.json // with attr "tsconfig": "tsconfig.custom.json"
            tsconfig.custom.json
            tsconfig.json
    tsconfig.json // "extends": "some-module"

// в этом случае в качестве расширяемого конфигурационного файла будет выбран файл, находящийся по пути /node_modules/some-module/tsconfig.custom.json
/project
    /node_modules
        /some-module
            package.json // without attr "tsconfig"
            tsconfig.custom.json
            tsconfig.json
    tsconfig.json // "extends": "some-module"

// в этом случае в качестве расширяемого конфигурационного файла будет выбран файл, находящийся по пути /node_modules/some-module/tsconfig.json
/project
    /node_modules
        /some-module
            package.json // without attr  "tsconfig"
            tsconfig.custom.json
            tsconfig.json
    tsconfig.json // "extends": "some-module/tsconfig.custom.json"

// в этом случае в качестве расширяемого конфигурационного файла будет выбран файл, находящийся по пути /node_modules/some-module/tsconfig.custom.json

alwaysStrict¶

--alwaysStrict — данная опция говорит компилятору, что рассматривать и генерировать код нужно с учетом строгого режима “use strict”.

{
  "compilerOptions": {
      "alwaysStrict": false
  }
}

type: boolean
default: false
values: true, false

strictNullChecks¶

--strictNullChecks — активировав эту опцию, компилятор не позволяет указывать в качестве значения типы Null и Undefined, если они не были указаны в аннотации.

{
  "compilerOptions": {
      "strictNullChecks": false
  }
}

type: boolean
default: false
values: true, false

stripInternal¶

--stripInternal — когда данная опция активна, компилятор не создает деклараций .d.ts для файлов, помеченных как /** @internal */

{
  "compilerOptions": {
      "stripInternal": false
  }
}

type: boolean
default: false
values: true, false

noImplicitThis¶

--noImplicitThis — в активном состоянии запрещает использование this в местах, не предусмотренных контекстом.

{
  "compilerOptions": {
      "noImplicitThis": false
  }
}

type: boolean
default: false
values: true, false

Пример с неактивной опцией

function f1() {
  this.name = 'newname'; // Ok -> context T1 window
}
function f2(this: T1) {
  this.name = 'newname'; // Ok -> context T1
}

this.name = 'newname'; // Error -> context window

class T1 {
  public name: string;

  public m1(name: string): void {
    this.name = name; // Ok -> context T1
  }
}

Пример с активной опцией

function f1() {
  this.name = 'newname'; // Error -> context T1 window
}
function f2(this: T1) {
  this.name = 'newname'; // Ok -> context T1
}

this.name = 'newname'; // Error -> context window

class T1 {
  public name: string;

  public m1(name: string): void {
    this.name = name; // Ok -> context T1
  }
}

noImplicitUseStrict¶

--noImplicitUseStrict — при активной опции ошибки будут выводиться в случаях, при которых в поток компиляции попадут файлы, содержащие ‘use strict’. Кроме того, скомпилированные файлы также не будут содержать указание ‘use strict’.

{
  "compilerOptions": {
      "noImplicitUseStrict": false
  }
}

type: boolean
default: false
values: true, false

baseUrl¶

--baseUrl — указывает базовый путь, относительно которого будет производиться поиск модулей.

{
  "compilerOptions": {
      "baseUrl": ""
  }
}

type: string
default: ""
values: base path

// m1 module ./node_modules/m1

// tsconfig.jsson  "baseUrl": "./node_modules"

// index.ts

import M1 from 'm1';

paths¶

--paths — с помощью этой опции создаются псевдонимы для используемых в программе модулей.

{
  "compilerOptions": {
      "paths": {
          "name": [ path/to/lib ]
      }
  }
}

type: object
default: null
values: {[key]: *}

Пример

// tsconfig.json
{
  "compilerOptions": {
      "paths": {
          "jquery": ["node_modules/jquery/dest/jquery.min.js"]
      }
  }
}

// or

// tsconfig.json
{
  "compilerOptions": {
      "baseUrl": "./node_modules",
      "paths": {
          "jquery": ["jquery/dest/jquery.min.js"]
      }
  }
}

import jquery from 'jquery';

// or

// tsconfig.json
{
  "compilerOptions": {
      "baseUrl": "./node_modules",
      "paths": {
          "jQ": ["jquery/dest/jquery.min.js"]
      }
  }
}

import jquery from 'jQ';

rootDir¶

--rootDir — с помощью этой опции можно ограничить область выборки файлов для компиляции. В качестве значения выступает строка — путь до конкретной директории или файла.

{
  "compilerOptions": {
      "rootDir": ""
  }
}

type: string
default: ""
values: path to dir with .ts files

rootDirs¶

--rootDirs — с помощью этой опции можно ограничить область выборки файлов для компиляции. В качестве значения принимается массив с путями до директорий и файлов.

{
  "compilerOptions": {
      "rootDirs": [

      ]
  }
}

type: array[ ]
default: null
values: path to dir with .ts files

traceResolution¶

--traceResolution — в случае активной текущей опции при компиляции будет выводиться информация о собираемых модулях.

{
  "compilerOptions": {
      "traceResolution": false
  }
}

type: boolean
default: false
values: true, false

lib¶

--lib — с помощью этой опции можно управлять конструкциями, которые включены в ту или иную версию ES.

{
  "compilerOptions": {
      "lib": [

      ]
  }
}

type: string[ ]
default: for es5 [dom, es5, ScriptHost], for es6 [dom, es6, dom.Iterable, ScriptHost]
values: dom, webworker, es5, es6 / es2015, es2015.core, es2015.collection, es2015.iterable, ,es2015.promise ,es2015.proxy ,es2015.reflect ,es2015.generator ,es2015.symbol ,es2015.symbol.wellknown ,es2016 ,es2016.array.include ,es2017 ,es2017.object ,es2017.sharedmemory ,scripthost

noLib¶

--noLib — не использует декларацию lib.d.ts по умолчанию.

{
  "compilerOptions": {
      "noLib": false
  }
}

type: boolean
default: false
values: true, false

noResolve¶

--noResolve — данная опция говорит компилятору не компилировать файлы, которые не были указаны в командной строке.

// terminal

tsc index.ts T1 --noResolve
// index.ts

import T1 from './T1'; // Ok
import T2 from './T2'; // Error

noStrictGenericChecks¶

--noStrictGenericChecks — отключает строгую проверку параметров типа для функциональных типов.

{
  "compilerOptions": {
      "noStrictGenericChecks": false
  }
}

type: boolean
default: false
values: true, false

preserveConstEnums¶

--preserveConstEnums — говорит компилятору не удалять из исходного кода перечисления (enum), объявленные как const.

{
  "compilerOptions": {
      "preserveConstEnums": false
  }
}

type: boolean
default: false
values: true, false

Пример с неактивной опцией

// .ts

const enum Animal {
  Bird = 'bird',
  Fish = 'fish',
}

let greeting: string = `Hello ${Animal.Bird}!`;
// .js

let greeting = `Hello ${'bird' /* Bird */}!`;

Пример с активной опцией

// .ts

const enum Animal {
  Bird = 'bird',
  Fish = 'fish',
}

let greeting: string = `Hello ${Animal.Bird}!`;
// .js

var Animal;
(function (Animal) {
  Animal['Bird'] = 'bird';
  Animal['Fish'] = 'fish';
})(Animal || (Animal = {}));
let greeting = `Hello ${'bird' /* Bird */}!`;

--removeComments — удаляет комментарии из сгенерированного .js.

{
  "compilerOptions": {
      "removeComments": false
  }
}

type: boolean
default: false
values: true, false

noUnusedLocals¶

--noUnusedLocals — активная опция заставляет компилятор выводить сообщения о неиспользуемых элементах кода. Простыми словами, если в коде что-то объявлено, но не используется, будет возникать ошибка.

{
  "compilerOptions": {
      "noUnusedLocals": false
  }
}

type: boolean
default: false
values: true, false

Пример

import T1 from './T1'; // Error

let v0: number; // Warning
let v1: number = 0; // Warning

function f /** Warning */() {
  let lv0: number; // Warning
  let lv1: string = 0; // Error

  f();
}

class C /**Error */ {
  private f0: number; // Warning
  private f1: number; // Warning
  private f2: number = 0; // Warning

  constructor() {
    this.f0 = 0;

    let c: C = new C(); // Warning
  }

  private m0 /** Warning */() {} // Warning
  private m1 /** Warning */() {
    // Warning
    this.m1();
  }
}

noUnusedParameters¶

--noUnusedParameters — данная опция заставляет компилятор выводить ошибки, если в коде будут найдены функции, чьи параметры не используются (за исключением параметров, идентификаторы которых начинаются с нижней черты, например, _prop).

{
  "compilerOptions": {
      "noUnusedParameters": false
  }
}

type: boolean
default: false
values: true, false

Пример

function f(
  p0: number /** Warning */,
  p1: number /** Warning */,
  p2: number = 0 /** Warning */
) {
  p1 = 0;
}

class C {
  constructor(
    p0: number /** Warning */,
    p1: number /** Warning */,
    p2: number = 0 /** Warning */
  ) {}

  private m(
    p0: number /** Warning */,
    p1: number /** Warning */,
    p2: number = 0 /** Warning */
  ) {
    p1 = 0;
  }
}

skipLibCheck¶

--skipLibCheck — при активной опции компилятор перестает проверять типы в файлах библиотеках с расширением .d.ts, что экономит время, но может привести к редким ошибкам, связанным с типами.

{
  "compilerOptions": {
      "skipLibCheck": false
  }
}

type: boolean
default: false
values: true, false

declarationDir¶

--declarationDir — указывает директорию, откуда будут подключаться или в которую будут создаваться файлы декларации .d.ts.

{
  "compilerOptions": {
      "declarationDir": ""
  }
}

type: string
default: ""
values: path to dir with .d.ts

types¶

--types — декларации, которые размещены в /node_modules/@types/ и чьи идентификаторы перечислены в массиве, будут доступны глобально. В случае указания пустого массива, глобальный доступ к декларациям будет запрещен. К декларациям, которые запрещены глобально, можно получить доступ только путем импортирования модуля, описываемого декларацией.

{
  "compilerOptions": {
      "types": [ "node", "express", "rxjs" ]
  }
}

type: string[ ]
default: null
values: lib identifier

Важно — все примеры ниже производились после установки декларации. npm i -D @types/react

Пример с отключенной опцией

// tsconfig.json

{
  "compilerOptions": {

  }
}
// index.ts

class T1 extends React.Component {} // Ok -> global

import { Component } from 'react';

class T2 extends Component {} // Ok -> import

Пример с пустым массивом

// tsconfig.json

{
  "compilerOptions": {
      "types": [

      ]
  }
}
// index.ts

class T1 extends React.Component {} // Error -> global

import { Component } from 'react';

class T2 extends Component {} // Ok -> import

Пример с установленным значением

// tsconfig.json

{
  "compilerOptions": {
      "types": [ "react" ]
  }
}
// index.ts

class T1 extends React.Component {} // Ok -> global

import { Component } from 'react';

class T2 extends Component {} // Ok -> import

typeRoots¶

--typeRoots — ожидает массив путей до директорий с декларациями.

{
  "compilerOptions": {
      "typeRoots": [ "./types" ]
  }
}

type: string[ ]
default: null
values: path to .d.ts

allowUnusedLabels¶

--allowUnusedLabels — в случае, если флаг --allowUnusedLabels не активен, при выявлении неиспользуемых label возникают ошибки.

{
  "compilerOptions": {
      "allowUnusedLabels": false
  }
}

type: boolean
default: false
values: true, false

noImplicitReturns¶

--noImplicitReturns — функции, имеющие возвращаемый тип, отличный от типа void, фактически могут не возвращать значение явно. Другими словами, чтобы удовлетворять условиям данной опции, в теле функции должен присутствовать лишь оператор return. Но при активной текущей опции функции будут обязаны возвращать значение явно.

{
  "compilerOptions": {
      "noImplicitReturns": false
  }
}

type: boolean
default: false
values: true, false

Пример

// noImplicitReturns === false

function f(value: number): number {
  if (value) {
    return; // Ok
  }

  // Ok
}
// noImplicitReturns === true

function f(value: number): number {
  if (value) {
    return; // Erorr
  }
}
// noImplicitReturns === true

function f(value: number): number {
  if (value) {
    return value; // Ok
  }

  // Error
}
// noImplicitReturns === true

function f(value: number): number {
  if (value) {
    return value; // Ok
  }

  return; // Error
}
// noImplicitReturns === true

function f(value: number): number {
  if (value) {
    return value; // Ok
  }

  return 0; // Ok
}

noFallthroughCasesInSwitch¶

--noFallthroughCasesInSwitch — при активной опции в случае, если блок кода case имеет код, при этом не имеет выхода из него (break или return), возникнет ошибка.

{
  "compilerOptions": {
      "noFallthroughCasesInSwitch": false
  }
}

type: boolean
default: false
values: true, false

Пример

function isAdmin(value: string) {
  switch (value) {
    case 'user': // If noFallthroughCasesInSwitch === false then Ok
      if (nodeenv.mode === 'dev') {
        console.log(`...`);
      }
    case 'moderator':
      return false;
    case 'admin':
      return true;
  }
}
function isAdmin(value: string) {
  switch (value) {
    case 'user': // If noFallthroughCasesInSwitch === true then Error
      if (nodeenv.mode === 'dev') {
        console.log(`...`);
      }
    case 'moderator':
      return false;
    case 'admin':
      return true;
  }
}

outFile¶

--outFile — компилятор, при условии, что в качестве модулей указано amd или system, будет сохранять все скомпилированные модули в один файл, указанный в качестве значения опции.

{
  "compilerOptions": {
      "outFile": ""
  }
}

type: string
default: ""
values: path to bundle

до компиляции

// T1.ts

export default class T1 {}

// T2.ts

import T1 from './T1';

export default class T2 extends T1 {}

// index.ts

import T2 from './T2';

const v1: T2 = new T2();

после компиляции

define('T1', ['require', 'exports'], function (
  require,
  exports
) {
  'use strict';
  Object.defineProperty(exports, '__esModule', {
    value: true,
  });
  class T1 {}
  exports.default = T1;
});
define('T2', ['require', 'exports', 'T1'], function (
  require,
  exports,
  T1_1
) {
  'use strict';
  Object.defineProperty(exports, '__esModule', {
    value: true,
  });
  class T2 extends T1_1.default {}
  exports.default = T2;
});
define('index', ['require', 'exports', 'T2'], function (
  require,
  exports,
  T2_1
) {
  'use strict';
  Object.defineProperty(exports, '__esModule', {
    value: true,
  });
  const v1 = new T2_1.default();
});

allowSyntheticDefaultImports¶

--allowSyntheticDefaultImports — позволяет предотвращать ошибки, которые возникают во время сборки по причине несовместимости SystemJS и CommonJS. Дело в том, что в ES6 синтаксисе есть возможность экспорта по умолчанию (export default), после компиляции которого CommonJS испытывает трудности, так как не знает, что такое default. Чаще всего проблема возникает в случаях, когда разработка ведется с применением одних модулей, а подключаемые библиотеки используют другие.

{
  "compilerOptions": {
      "allowSyntheticDefaultImports": false
  }
}

type: boolean
default: false
values: true, false

allowUnreachableCode¶

--allowUnreachableCode — если значение данной опции выставлено в true, то при обнаружении неиспользуемого кода будет выводиться сообщение об ошибке.

{
  "compilerOptions": {
      "allowUnreachableCode": false
  }
}

type: boolean
default: false
values: true, false

Пример

function f1(value: number): void {
  throw new Error('');

  console.log(''); // Error - Unreachable code detected
}

function f2() {
  return;
  {
    value: ''; // Error - Unreachable code detected
  }
}

allowJs¶

--allowJs — в случае, когда код, одна часть которого написана на TypeScript, а другая на JavaScript, требуется собрать в общий файл, достаточно активировать текущую опцию.

{
  "compilerOptions": {
      "allowJs": false
  }
}

type: boolean
default: false
values: true, false

Пример

// sun.js

export default function sum(a, b) {
  return a + b;
}

// index.ts

import sum from './sum';

let result: number = sum(1, 1);

reactNamespace¶

--reactNamespace — позволяет установить фабрику рендера .jsx синтаксиса.

{
  "compilerOptions": {
      "reactNamespace": ""
  }
}

type: string
default: ""
values: "*"

Пример

// index.tsx

import { jsxFactory } from 'jsxFactory';

const div = <div>Hello JSX!</div>;

// after compile

('use strict');
var jsxFactory_1 = require('jsxFactory');
var div = jsxFactory_1.jsxFactory.createElement(
  'div',
  null,
  'Hello JSX!'
);

pretty¶

--pretty — раскрашивает в разные цвета выводимые в консоль сообщения, делая их более понятными.

{
  "compilerOptions": {
      "pretty": true
  }
}

type: boolean
default: true
values: true, false

moduleResolution¶

--moduleResolution — позволяет конкретизировать поведение модулей.

{
  "compilerOptions": {
      "moduleResolution": "node"
  }
}

type: string
default: module === AMD | System | ES6 ? classic : node
values: classic, node

exclude¶

exclude — в обычной ситуации под компиляцию рекурсивно попадают все файлы, которые включает в себя директория, содержащая tsconfig.json. Решением этой проблемы является свойство exclude, определенное в корне конфигурационного файла. В качестве его значения выступает массив с путями к файлам или директориям, которые следует исключить из компиляции.

type: string[ ]
default: null
values: path to file or dir

noEmitHelpers¶

--noEmitHelpers — после компиляции файлов с расширением .ts каждый скомпилированный файл .js (модуль) содержит, если в этом есть необходимость, вспомогательный код (проще говоря, helpers), который помогает решить проблему совместимости версий ES. В большей степени этот код, находящийся в разных файлах (модулях), идентичен. Простыми словами, helpers повторяются от файла к файлу. Компилятор вынужден добавлять повторяющийся код, чтобы гарантировать работу каждого модуля по отдельности. Но если модули собираются в одну общую сборку, активация текущего флага укажет компилятору, что helpers нужно вынести в отдельный модуль, который будет доступен в зависящих от него частях кода. Это поможет избавиться от дублирования кода и сократит размер собранного файла.

{
  "compilerOptions": {
      "noEmitHelpers": false
  }
}

type: boolean
default: false
values: true, false

newLine¶

--newLine — по умолчанию новая строка обозначается rn на Windows и r на nix системах. Для переопределения поведения используется данная опция.

{
  "compilerOptions": {
      "newLine": "LF"
  }
}

type: string
default: platform specific
values: CRLF, LF

inlineSourceMap¶

--inlineSourceMap — активная опция приводит к тому, что source maps записываются inline в .js файлы, а не выносятся в отдельные файлы .map.js.

{
  "compilerOptions": {
      "inlineSourceMap": false
  }
}

type: boolean
default: false
values: true, false

inlineSources¶

--inlineSources — при активной опции источник source map включается в файл вместе c source map. Работает в паре с опцией --inlineSourceMap.

{
  "compilerOptions": {
      "inlineSources": false
  }
}

type: boolean
default: false
values: true, false

noEmitOnError¶

--noEmitOnError — несмотря на ошибки в TypeScript коде, компилятор все равно генерирует .js файлы. Для того чтобы компилятор генерировал файлы .js только в случае успешной компиляции, нужно активировать данную опцию.

{
  "compilerOptions": {
      "noEmitOnError": false
  }
}

type: boolean
default: false
values: true, false

noEmit¶

--noEmit — при активной опции информация о компиляции перестает выводиться.

{
  "compilerOptions": {
      "noEmit": false
  }
}

type: boolean
default: false
values: true, false

charset¶

--charset — устанавливает формат входных файлов.

{
  "compilerOptions": {
      "charset": ""
  }
}

type: string
default: utf8
values: *

diagnostics¶

--diagnostics — выводит диагностическую информацию.

{
  "compilerOptions": {
      "diagnostics": false
  }
}

type: boolean
default: false
values: true, false

declaration¶

--declaration — генерирует файлы декларации .d.ts из .ts файлов.

{
  "compilerOptions": {
      "declaration": false
  }
}

type: boolean
default: false
values: true, false

downlevelIteration¶

--downlevelIteration — при активной опции становится возможно использовать итераторы при компиляции в версии ниже ES6. Помимо самих итераторов, становятся доступны и нововведения (for...of, Array Destructuring, Spread и т.д.), которые построены с их использованием.

{
  "compilerOptions": {
      "downlevelIteration": false
  }
}

type: boolean
default: false
values: true, false

emitBOM¶

--emitBOM — Извлекает маркер последовательности байтов UTF-8 (BOM) в начале выходных файлов.

{
  "compilerOptions": {
      "emitBOM": false
  }
}

type: boolean
default: false
values: true, false

--emitDecoratorMetadata — …

{
  "compilerOptions": {
      "emitDecoratorMetadata": false
  }
}

type: boolean
default: false
values: true, false

forceConsistentCasingInFileNames¶

--forceConsistentCasingInFileNames — запрещает несогласованные ссылки на один и тот же файл.

{
  "compilerOptions": {
      "forceConsistentCasingInFileNames": false
  }
}

type: boolean
default: false
values: true, false

help (h)¶

--help или -h — выводит список доступных опций.

importHelpers¶

--importHelpers — импортирует таких помощников (helpers), как __extends, __rest и т.д.

{
  "compilerOptions": {
      "importHelpers": false
  }
}

type: boolean
default: false
values: true, false

isolatedModules¶

--isolatedModules — транслирует каждый файл как отдельный модуль.

{
  "compilerOptions": {
      "isolatedModules": false
  }
}

type: boolean
default: false
values: true, false

listEmittedFiles¶

--listEmittedFiles — выводит список сгенерированных файлов.

{
  "compilerOptions": {
      "listEmittedFiles": false
  }
}

type: boolean
default: false
values: true, false

listFiles¶

--listFiles — выводит список участвующих в компиляции файлов.

{
  "compilerOptions": {
      "listFiles": false
  }
}

type: boolean
default: false
values: true, false

sourceRoot¶

--sourceRoot — в качестве значения принимает базовый путь до директории, в которой лежат исходники .ts, необходимые для ассоциации с source map.

{
  "compilerOptions": {
      "sourceRoot": ""
  }
}

type: string
default: ""
values: path to source .ts dir

mapRoot¶

--mapRoot — место, откуда будут браться файлы .map.js.

{
  "compilerOptions": {
      "mapRoot": ""
  }
}

type: string
default: ""
values: «

maxNodeModuleJsDepth¶

--maxNodeModuleJsDepth — максимальная глубина поиска зависимостей в /node_modules и загрузки файлов .js. Работает только с активной опцией --allowJs.

{
  "compilerOptions": {
      "maxNodeModuleJsDepth": 0
  }
}

type: number
default: 0
values: 0...n

project (p)¶

--project или -p — с помощью этого флага можно указать как путь до директории, которая содержит tsconfig.json, так и на конкретный tsconfig.json файл.

tsc --project
tsc -p ./configs/tsconfig.es6.json

type: string
default: `**values**:path to tsconfig.json`

init¶

--init — создает новый tsconfig.json со всеми доступными опциями, большинство из которых закомментировано, дабы создать оптимальную конфигурацию.

version (v)¶

--version или -v — выводит информацию о текущей версии TypeScript.

watch (w)¶

--watch или -w — запускает компилятор в режиме наблюдения за изменением файлов. При каждом изменении отслеживаемых файлов компиляция будет запущена автоматически.

preserveSymlinks¶

--preserveSymlinks — текущая опция демонстрирует поведение, идентичное реализуемому в NodeJS с активным флагом --preserve-symlinks. При активной опции символические ссылки на модели (modules) и пакеты (packages) разрешаются относительно файла символической ссылки, а не относительно пути, к которому разрешается символическая ссылка. Кроме того, поведение при активной текущей опции противоположно поведению, предоставляемому Webpack с помощью флага со схожим по смыслу названием resolve.symlinks.

{
  "compilerOptions": {
      "preserveSymlinks": false
  }
}

type: boolean
default: false
values: true, false

strictFunctionTypes¶

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

{
  "compilerOptions": {
      "strictFunctionTypes": false
  }
}

type: boolean
default: false
values: true, false

locale¶

--locale — позволяет указать один из заданных языков для вывода диагностических сообщений.

{
  "compilerOptions": {
      "locale": "en" | "cs" | "de" | "es" | "fr" | "it" | "ja" | "ko" | "pl" | "pt-BR" | "ru" | "tr" | "zh-CN" | "zh-TW" |
  }
}

type: string
default: platform specific
values: English (US): en,Czech: cs,German: de ,Spanish: es ,French: fr,Italian: it ,Japanese: ja ,Korean: ko,Polish: pl ,Portuguese(Brazil): pt-BR ,Russian: ru,Turkish: tr,Simplified Chinese: zh-CN ,Traditional Chinese: zh-TW

strinctPropertyInitialization¶

--strictPropertyInitialization — при активной опции в случае, когда в классе присутствуют поля, не инициализированные в момент создания или в конструкторе, возникает ошибка. Более подробно данная тема раскрыта в главе “Классы — Definite Assignment Assertion Modifier”.

{
  "compilerOptions": {
      "strictPropertyInitialization": false
  }
}

type: boolean
default: false
values: true, false

class Identifier {
  public a: number = 0; // Ok, инициализация при объявлении
  public b: number; // Ok, инициализация в конструкторе
  public c: number | undefined; // Ok, явное указание принадлежности к типу Undefined
  public d: number; // Error, инициализация отсутствует
  constructor() {
    this.b = 0;
  }
}

esModuleInterop¶

--esModuleInterop — с активной опцией сгенерированный код таких модулей формата CommonJS/AMD/UMD больше походит на код, сгенерированный Babel.

{
  "compilerOptions": {
      "esModuleInterop": false
  }
}

type: boolean
default: false
values: true, false

emitDeclarationsOnly¶

--emitDeclarationsOnly — данная опция указывает компилятору, что нужно генерировать только файлы декларации с расширением .d.ts и пропускать файлы с расширением .js и .jsx. Такое поведение может быть полезно, если код, помимо компилятора TypeScript, компилируется ещё и с помощью Babel.

{
  "compilerOptions": {
      "emitDeclarationsOnly": false
  }
}

type: boolean
default: false
values: true, false

resolveJsonModule¶

--resolveJsonModule — данная опция при активной опции --esModuleInterop
и опции --module, установленной в commonjs, позволяет в среде NodeJS полноценно взаимодействовать с json.

{
  "compilerOptions": {
      "resolveJsonModule": false
  }
}

type: boolean
default: false
values: true, false

// file config.json

{
  "name": "",
  "age": 0
}

// file index.ts


import config from "./config.json";

config.name = 'name'; // Ok
config.name = 0; // Error


// tsconfig.json


{
   "compilerOptions": {
       "module": "commonjs",
       "resolveJsonModule": true,
       "esModuleInterop": true
   }
}

declarationMap¶

--declarationMap — при совместном использовании с активной опцией --declaration заставляет компилятор, помимо .d.ts, также генерировать .d.ts.map, которые позволяют при переходе к определению (go to definition) направлять в файл .ts, а не .d.ts.

{
  "compilerOptions": {
      "declarationMap": false
  }
}

type: boolean
default: false
values: true, false

strictBindCallApply¶

--strictBindCallApply — текущий флаг, входящий в группировку --strict, активирует проверку вызова таких методов, как apply, call и bind. Это стало возможным благодаря добавлению двух новых типов, CallableFunction и NewableFunction, которые содержат обобщенное описание методов apply, call и bind, как для обычных функций, так и для функций конструкторов соответственно.

{
  "compilerOptions": {
      "strictBindCallApply": false
  }
}

type: boolean
default: false
values: true, false

function f(p0: number, p1: string) {}

f.call(null, 0, ''); // ok
f.call(null, 0, 0); // error
f.call(null, 0); // error
f.call(null, 0, '', 0); // error

f.apply(null, [0, '']); // ok
f.apply(null, [0, 0]); // error
f.apply(null, [0]); // error
f.apply(null, [0, '', 0]); // error

f.bind(null, 0, ''); // ok
f.bind(null, 0, 0); // error
f.bind(null, 0); // ok
f.bind(null, 0, '', 0); // ok

showConfig¶

--showConfig — при активном текущем флаге компилятор tsc во время компиляции выведет в консоль содержимое конфигурационного файла tsconfig.json, разрешенного с учетом механизма расширения (extends), если таковой механизм имеет место быть. Этот функционал может быть очень полезным при отладке.

{
  "compilerOptions": {
      "showConfig": false
  }
}

type: boolean
default: false
values: true, false

build¶

--build — данный флаг указывает компилятору tsc, что проект нужно собирать как проект, использующий ссылки на другие проекты. Подробнее об этом можно узнать из главы Сборка с использованием ссылок на проекты. Также флаг --build может использоваться в сочетании со специфичными только для него флагами --verbose, --dry, --clean, --force, а также с флагом --watch.

type: string
default: `**values**:paths to tsconfig.json or dir with tsconfig.json`

verbose¶

--verbose — текущий флаг указывает компилятору выводить более подробный отчет при инкрементальной сборке проекта. Используется только совместно с флагом --build.

dry¶

--dry — при указании текущего флага сборка будет выполнена без порождения выходных файлов. Данный флаг полезно использовать совместно с флагом --verbose. Используется только совместно с флагом --build.

clean¶

--clean — удаляет выходные файлы, соответствующие заданным входным. Используется только совместно с флагом --build.

force¶

--force — принудительно выполняет неинкрементальную сборку. Используется только совместно с флагом --build.

incremental¶

--incremental — флаг, при активации которого после первой компиляции проекта в заданной атрибутом outDir директории создается файл .tsbuildinf, который хранит метаинформацию об изменении файлов, что позволяет производить ускоренные инкрементальные сборки при всех последующих запусках компилятора.

{
    "compilerOptions": {
        "incremental": true,
        "outDir": "./dest"
    }
}

В случае, когда имя выходного файла задается с помощью флага --outFile, имя генерируемого файла .tsbuildinf будет включать в себя название выходного файла (.client.tsbuildinf для файла client.js и .server.tsbuildinf для server.js соответственно).

Примечание: создатели TypeScript заранее предупреждают, что генерируемые файлы .tsbuildinf не предназначены для использования сторонними библиотеками, так как их определение не будет обладать совместимостью от версии к версии.

Кроме того, с помощью флага --tsBuildInfoFile можно задать место сохранения файла .tsbuildinf.

{
    "compilerOptions": {
        "incremental": true,
        "tsBuildInfoFile": "./buildinfo",
        "outDir": "./dest"
    }
}

tsBuildInfoFile¶

--tsBuildInfoFile — флаг, с помощью которого указывается место сохранения файла .tsbuildinf, генерирующегося при активной опции --incremental и служащего для хранения метаинформации, призванной ускорить последующие сборки.

{
    "compilerOptions": {
        "incremental": true,
        "tsBuildInfoFile": "./buildinfo",
    }
}

allowUmdGlobalAccess¶

--allowUmdGlobalAccess — при активном текущем флаге становится возможным обращение к глобальным определениям из модулей.

{
    "compilerOptions": {
        "allowUmdGlobalAccess": false,
    }
}

type: boolean
default: false
values: true, false

// allowUmdGlobalAccess === false

import * as Rx from 'rxjs';

const ref = React.createRef(); // Error, обращение к глобальным переменным в модулях недопустимо
// allowUmdGlobalAccess === true

import * as Rx from 'rxjs';

const ref = React.createRef(); // Ok, доступ к глобальному определению из модуля

disableSourceOfProjectReferenceRedirect¶

--disableSourceOfProjectReferenceRedirect — при использовании механизма ссылок на проекты активация данного флага говорит компилятору, что в качестве информации о типах следует использовать файлы декларации .d.ts, а не исходные файлы проекта. Активация данного флага способна повысить производительность сборки, но вносит некоторую специфику, поэтому уместна лишь на больших проектах. Более подробно читайте об этом в главе, посвященной использованию ссылок на проекты.

{
    "compilerOptions": {
        "disableSourceOfProjectReferenceRedirect": false,
    }
}

type: boolean
default: false
values: true, false

useDefineForClassFields¶

--useDefineForClassFields — данный флаг активирует новое поведение генерации конечного кода, доступное с версии v3.7 и предназначенное для предотвращения переопределения свойств при механизме наследования.

[Важно] Начиная с версии 4.0 логика компилятора TypeScript подразумевает непереопределяемое поведение, равнозначное поведению при активном текущем флаге.

{
    "compilerOptions": {
        "useDefineForClassFields": false,
    }
}

type: boolean
default: false
values: true, false

importsNotUsedAsValues¶

--importsNotUsedAsValues — задает стратегию, используемую компилятором для разрешения зависимостей модуля, путем уточнения формы импорта и экспорта. Более подробно о текущем флаге можно прочесть в главе «Импорт и экспорт только типа и флаг —importsNotUsedAsValues».

{
    "compilerOptions": {
        "importsNotUsedAsValues": "remove",
    }
}

type: string
default: remove
values: remove, preserve, error

assumeChangesOnlyAffectDirectDependencies¶

--assumeChangesOnlyAffectDirectDependencies — в режиме --watch + --incremental активация данной опции позволяет компилятору отказаться от перепроверокперестраивания файлов, которые на основе метаинформации расцениваются затронутыми. Вместо этого будет перепроверятьсяперестраиваться только непосредственно измененные файлы и файлы, их импортирующие.

Представьте, что fileA.ts импортирует fileB.ts, который импортирует fileC.ts, который импортирует fileD.td.

При активном режиме --watch изменения в файле fileD.ts означают, что, как минимум, будут проверены fileC.ts, fileB.ts и fileA.ts. При активной опции --assumeChangesOnlyAffectDirectDependencies проверке подвергнется лишь fileA.ts и fileB.ts.

// tsconfig.json

{
  "watchOptions": {
    "assumeChangesOnlyAffectDirectDependencies": "false"
  }
}

type: boolean
default: false
values: true, false

watchFile¶

--watchFile — стратегия наблюдения за отдельными файлами.

// tsconfig.json

{
  "watchOptions": {
    "watchFile": "useFsEvents"
  }
}

type: string
default: useFsEvents
values: fixedPollingInterval, priorityPollingInterval, dynamicPriorityPolling, useFsEvents, useFsEventsOnParentDirectory

описание

  • fixedPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду с фиксированным интервалом.
  • priorityPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду, но использовать эвристику для проверки файлов определенных типов реже, чем других.
  • dynamicPriorityPolling: Использовать динамическую очередь, в которой менее часто изменяемые файлы будут проверяться реже.
  • useFsEvents [ПО УМОЛЧАНИЮ]: Пытаться использовать собственные события операционной системы/файловой системы для изменения файлов.
  • useFsEventsOnParentDirectory: Пытаться использовать собственные события операционной системы/файловой системы для прослушивания изменений в каталогах, содержащих файл. Это может использовать меньше файловых наблюдателей, но также быть менее точным.

watchDirectory¶

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

// tsconfig.json

{
  "watchOptions": {
    "watchDirectory": "useFsEvents"
  }
}

type: string
default: useFsEvents
values: fixedPollingInterval, dynamicPriorityPolling, useFsEvents

описание

  • fixedPollingInterval: Проверять каждый каталог на наличие изменений несколько раз в секунду с фиксированным интервалом.
  • dynamicPriorityPolling: Использовать динамическую очередь, в которой менее часто изменяемые каталоги будут проверяться реже.
  • useFsEvents[ПО УМОЛЧАНИЮ]: Пытаться использовать собственные события операционной системы/файловой системы для изменений каталога.

fallbackPolling¶

--fallbackPolling — при использовании событий файловой системы этот параметр определяет стратегию опроса, которая используется, когда в системе заканчиваются собственные наблюдатели файлов и/или не поддерживаются собственные средства просмотра файлов.

// tsconfig.json

{
  "watchOptions": {
    "fallbackPolling": "dynamicPriorityPolling"
  }
}

type: string
default: useFsEvents
values: fixedPollingInterval, dynamicPriorityPolling, priorityPollingInterval

описание

  • fixedPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду с фиксированным интервалом.
  • dynamicPriorityPolling: Использовать динамическую очередь, в которой менее часто изменяемые файлы будут проверяться реже.
  • priorityPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду, но использовать эвристику для проверки файлов определенных типов реже, чем других.

synchronousWatchDirectory¶

--synchronousWatchDirectory — отключить отложенное наблюдение за каталогами.

// tsconfig.json

{
  "watchOptions": {
    "synchronousWatchDirectory": "false"
  }
}

type: boolean
default: false
values: true, false

noUncheckedIndexedAccess¶

--noUncheckedIndexedAccess — при активной текущей опции обращаться к динамическим членам объекта разрешается только после подтверждения их существования, а также совместно с такими механизмами, как опциональный оператор !. или оператор опциональной последовательности ?. .

// @filename: tsconfig.json

{
  "watchOptions": {
    "noUncheckedIndexedAccess": "true"
  }
}

type: boolean
default: true
values: true, false

// @filename: tsconfig.json

{
  "compilerOptions": {
    "noUncheckedIndexedAccess": false
  }
}
type T = {
  [key: string]: number | string;
};

function f(p: T) {
  /**
   * Обращение к несуществующим полям
   */
  p.bad.toString(); // Ok -> Ошибка времени исполнения
  p[Math.random()].toString(); // Ok -> Ошибка времени исполнения
}
// @filename: tsconfig.json

{
  "compilerOptions": {
    "noUncheckedIndexedAccess": true
  }
}
type T = {
  [key: string]: number | string;
};

function f0(p: T) {
  /**
   * Обращение к несуществующим полям
   */
  p.bad.toString(); // Error -> Object is possibly 'undefined'.ts(2532)
  p[Math.random()].toString(); // Error -> Object is possibly 'undefined'.ts(2532)

  // Проверка наличия поля bad
  if ('bad' in p) {
    p.bad?.toString(); // Ok
  }

  // Использование опционального оператора
  p[Math.random()]!.toString(); // Ok -> ошибка во время выполнения

  p[Math.random()]?.toString(); // Ok -> Ошибка не возникнет
}

function f1(array: string[]) {
  for (let i = 0; i < array.length; i++) {
    array[i].toString(); // Error -> Object is possibly 'undefined'.
  }
}

noPropertyAccessFromIndexSignature¶

--noPropertyAccessFromIndexSignature — активирует поведение, запрещающее обращение через точечную нотацию к динамическим членам объекта, определяющего строковую индексную сигнатуру,

// @filename: tsconfig.json

{
  "compilerOptions": {
    "noPropertyAccessFromIndexSignature": "false"
  }
}

type: boolean
default: false
values: true, false

type Settings = {
  env?: string[]; // определение необязательного предопределенного поля

  [key: string]: any; // определение динамических полей
};

function configurate(settings: Settings) {
  //---------------------------
  // динамическое поле
  if (settings.envs) {
    // Ошибка при активном флаге и Ok при неактивном
  }
  if (settings['envs']) {
    // Ok при любом значении флага
  }

  //----------------------------
  // предопределенное поле
  if (settings.env) {
    // Ok [1]
  }
  if (settings['env']) {
    // Ok при любом значении флага
  }
}

explainFiles¶

--explainFiles — команда, позволяющая выводить информацию о зависимостях проекта не только в консоль, но и файл, или даже открывать в visual studio code.

// вывод в файл
tsc --explainFiles > explanation.txt

// вывод в редактор vsc
tsc --explainFiles | code -

This tutorial provides syntax for ignoring lint rules at the line, file, and package level. I focus on syntax for TypeScript-ESLint but will include TSLint and ESLint commands.

TSLint was deprecated in late 2019 in favor of typescript-eslint. The combined linter is a good idea because both TSLint and ESLint are linters and many people want the functionality they both provide. ESLint on its own is still a great linter for developers who are not using TypeScript.

Here is the different syntax for disabling next line rules:

  • @ts-ignore – TypeScript-ESLint syntax for ignoring TypeScript rules
  • eslint-disable-next-line – ESLint and TypeScript-ESLint syntax for disabling non-ts rules
  • tslint:disable-next-line – deprecated TSLint syntax

This can be tricky stuff. Also, remember that these are presented as comments in the code:

ts-ignore next line
ts-ignore next line

In the examples below I will show details such as:

  • Ignoring specific rules
  • Disabling lint rules for a block of code
  • Re-enabling lint rules
  • Several methods for controlling file-level rule checking

Related: Test your TypeScript knowledge against these 50 difficult TypeScript questions.

I’ll start with several methods of how to disable linting, because the how is factual. Then when is more opinionated, so take that with a grain of salt.

The Resources section has a Code Sandbox link with live tutorial code that shows these rules being used.

How To Ignore Next Line With TypeScript-ESLint

There are two primary commands for ignoring the next TypeScript line:

  • @ts-ignore: Ignore a single line with @ts-ignore. This actually will ignore a statement, which may be more than a single line. However, it will not ignore an entire block.
// @ts-ignore
const useStyles = makeStyles((theme) => ({
  root: {
    display: "flex",
    flexDirection: "rowssss"
  }
}));
  • @ts-expect-error: Tell the compiler to expect an error (and throw an error if no error actually occured) with @ts-expect-error . An example usage from the TypeScript docs: if your unit tests are written in TypeScript, but you actually want to write a ‘breaking’ test, you can’t…unless you tell the compiler to expect an error. Simply put, this directive is more specific than @ts-ignore.

When To Use ts-expect-error Or ts-ignore

Based on the search volume I see for different keywords, most people use @ts-ignore. It’s simpler to understand and gets the job done.

The TypeScript team has these guidelines on when to use @ts-expect-error instead of @ts-ignore. The most important guideline: if you plan to fix code instead of leaving suppression errors, then use @ts-expect-error.

How To Ignore Next Line With ESLint

If you are using ESLint and you need to disable the next line, use this code:

  • eslint-disable-next-line

This does not disable TypeScript rules and should not be used in files ending in .tsx. It does work in .js or .jsx files in projects with TypeScript-ESLint enabled or with standard ESLint enabled.

Here’s an example where the myName const is never used and I disable the ESLint warning.

// eslint-disable-next-line  no-unused-vars
const myName = 'Jon';

Notice the specifier of no-unused-vars. This leaves all other TypeScript and ESLint rules enabled and only disables the specific rule. You can read more about ESLint rules here.

How To Ignore Next Line With TSLint

Here is the deprecated method for ignoring or disabling a TypeScript rule in TSLint:

  • tslint:disable-next-line

Only use this suppression comment if you are still using TSLint.

If you are not sure which linter you are using, check your package.json. If you see @tslint, you are using the old deprecated TypeScript linter. If you see @typescript-eslint, you are using the linter currently recommended by Palantir, the creators of TSLint.

How To Ignore File Rules With TypeScript-ESLint

  • @ts-nocheck Tell the compiler to skip type checking for an entire file with @ts-nocheck . Interestingly, the opposite of this is @ts-check, which can be used to turn on type-checking for non-TypeScript files.
  • ^^^Notice the syntax for the above directives did not change with the move from TSLint to typescript-eslint.
  • Ignore ‘normal’ (non-TypeScript) ESLint rules: ignore multiple lines with /* eslint:disable */ and /* eslint:enable */
/* eslint-disable  @typescript-eslint/no-unused-vars */
const str: string = "asda";
const str2: string = "asda2";
/* eslint-enable @typescript-eslint/no-unused-vars */

Here I specified the no-unused-vars command to disable. Once the offending section is over, don’t forget to re-enable the rule. It’s important to note that eslint-disable requires the use of /* */ commenting instead of // commenting syntax.

Also, eslint-disable can be used at the top of a file to turn off linting for the whole file.

Remember that ignoring and disabling using @typescript-eslint is only valid in .tsx files.

How To Ignore TypeScript-ESLint Rules At The Package Level

If you need to ignore rules across your entire app, you need to set up an eslintrc.* file.

In this file, you can specify many configs for ESlint. The “rules” config is what we are looking for. Here’s an example of disabling no-unused-vars for the whole app.

rules: {
    
    "@typescript-eslint/no-unused-vars": "off",
}

At the time of updating this article (June 2021), Code Sandbox does not yet support eslintrc.* files (Check this thread for updates).

If you are using ESlint, but not typescript-eslint, you may be aware that you can add rules in package.json under eslintConfig.

"eslintConfig": {
    "rules": {
      "no-unused-vars": "off"
    }
  },

However, typescript-eslint does not look at the package.json for rules and currently requires an actual eslintrc.* file.

When To Ignore TypeScript-ESLint Rules

Some teams may implement ban-ts-comment in the eslintrc file, which blocks the following:

@ts-expect-error
@ts-ignore
@ts-nocheck
@ts-check

This means the team finds it unacceptable to ever ignore a rule (and block team members from doing so).

These are a few suggestions, and they are not hard-and-fast rules.

  • When using a third-party library that is poorly typed. It’s not your job to fix their typing or dig into their code.
  • When TypeScript’s type widening causes reasonable code to be flagged. Is it better to change the code to be less clear, or to simply ignore the line? See this example in the Material-UI docs where flexDirection: 'column' is flagged. TypeScript widens ‘column’ to string, which is incompatible with flexDirection. The MUI docs describe how to fix this, but should we really please the compiler here, or should we simply move on?
  • When data from BE is so complex that it would take multiple hours to figure out TypeScript compatibility. Consider this: you already have a contract with BE. Perhaps it is simply best to cast the type and do actual value-adding work.

If you want a great rules list to start from, take a look at the AirBnB rules package and style guide.

How Do I Ignore Next Line in ESLint?

If you are using ESLint without TypeScript, ignore next line with the following code:
// eslint-disable-next-line
If you are using TypeScript-ESLint, ignore next line with the following code:
// @ts-ignore

How Do Ignore Multiple Lines in ESLint?

Ignore multiple lines with the following code:
/* eslint-disable */
Make sure to re-enable ESLint with /* eslint-enable */ at the end of the block.

Resources

Here’s how to use ESLint fix in your project.

Here’s how to configure the @typescript-eslint/ban-types rule in your project.

Here’s how and when to specify global variables in your .eslintrc file.

Some of the most important ESLint rules are found in the jsx-a11y plugin, which enforces web accessibility standards. Read about the top five rules here, and here’s how to fix jsx-a11y/interactive-supports-focus errors.

Опции компилятора

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

strict

--strict — активирует все флаги, входящие в группировку строгого режима и сопутствующие повышению типобезопасности программы. На данный момент флаг strict активирует следующие опции компилятора: --strictNullChecks, --noImplicitAny, --noImplicitThis, --alwaysStrict, --strictFunctionTypes, --strictPropertyInitialization и --strictBindCallApply. Несмотря на то, что флаг strict активирует сразу все указанные флаги, при желании конкретные флаги можно отключить.

ts

{ "compilerOptions": { "strict": false, "strictNullChecks": false } }

type: boolean
default: false
values: true, false

suppressExcessPropertyErrors

--suppressExcessPropertyErrors — если данная опция активна, то компилятор перестает проверять литералы объекта на излишние члены.

ts

{ "compilerOptions": { "suppressExcessPropertyErrors": false } }

type: boolean
default: false
values: true, false

Пример

ts

interface T1 { f1: number; } let v1: T1 = {f1: 0, f2: ''}; // suppressExcessPropertyErrors === false ? Error : Ok

suppressImplicitAnyIndexErrors

--suppressImplicitAnyIndexErrors — при активной опции --noImplicitAny подавляет ошибки, связанные с добавлением динамических свойств в объекты, у которых отсутствует индексное определение.

ts

{ "compilerOptions": { "suppressImplicitAnyIndexErrors": false } }

type: boolean
default: false
values: true, false

Пример для неактивной опции

ts

// tsconfig.json { "compilerOptions": { "noImplicitAny": true, "suppressImplicitAnyIndexErrors": false } }

ts

// index.js interface Member { } interface IndexMember { [key: string]: any; } let memberObject: Member = {}; memberObject['name'] = 'object'; // Error let indexMemberObject: IndexMember = {}; indexMemberObject['name'] = 'object'; // Ok

Пример для активной опции

ts

// tsconfig.json { "compilerOptions": { "noImplicitAny": true, "suppressImplicitAnyIndexErrors": false } }

ts

// index.js interface Member { } interface IndexMember { [key: string]: any; } let memberObject: Member = {}; memberObject['name'] = 'object'; // Ok let indexMemberObject: IndexMember = {}; indexMemberObject['name'] = 'object'; // Ok

noImplicitAny

--noImplicitAny — при активной опции выводит ошибку, если вывод типов установил принадлежность типа члена к any.

ts

{ "compilerOptions": { "noImplicitAny": false } }

type: boolean
default: false
values: true, false

Пример с неактивной опцией

ts

let v1; // Ok function f1(p1) { // Ok let v1; // Ok return p1; } type T2 = {f1}; // Ok interface IT1 { f1; // Ok } class T1 { public f1; // Ok }

Пример с активной опцией

ts

let v1; // Ok function f1(p1) { // Parameter 'p1' implicitly has an 'any' type. let v1; // Ok return p1; } type T2 = {f1}; // Member 'f1' implicitly has an 'any' type interface IT1 { f1; // Member 'f1' implicitly has an 'any' type } class T1 { public f1; // Member 'f1' implicitly has an 'any' type }

checkJs

--checkJs — данная опция говорит компилятору, что код, который находится в файлах с расширением .js, также нужно проверять на ошибки. При этом можно исключить определенные файлы из проверки, добавив им строку // @ts-nocheck. Или наоборот, можно попросить компилятор проверить только помеченные как // @ts-check файлы без активации опции --checkJs. К тому же можно игнорировать ошибки на конкретных строках, указав // @ts-ignore: error message предыдущей строке.

ts

{ "compilerOptions": { "checkJs": false } }

type: boolean
default: false
values: true, false

Кроме этого, при активной опции --checkJS компилятору с помощью аннотации /** @type {...} */ можно указывать типы прямо в файлах с расширением .js.

При использовании JavaScript в TypeScript коде нарушается типобезопасность программы.

ts

// file sum.js export function sum(a,b){ return a + b; }

ts

// file index.js import {sum} from "./sum.js"; let n = sum('5', 5); // len n: any, кроме того результаты выполнения функции будет неверным

Но это можно исправить с помощью специальной аннотации, которая располагается в JavaScript коде.

ts

// file sum.js /** @type {(a:number,b:number) => number)} */ export function sum( a,b){ return a + b; }

ts

// file index.js import {sum} from "./sum.js"; let n0 = sum('5', 5); // Error let n1 = sum(5, 5); // Ok, let n1: number

JSX

--jsx — данная опция указывает компилятору, какое расширение указывать .tsx файлам после компиляции. Все дело в том, что у React существует два вида приложений, одни создаются для веб-платформы, другие для мобильных платформ. Кроме того, файлы для веб-платформы на входе должны иметь расширение .jsx, в, то время как для мобильной платформы — .js. Поэтому компилятору нужно указывать, в какой именно формат преобразовывать файлы с расширением .tsx.

При указании "react" в качестве значения опции --jsx компилятор преобразует .tsx в .jsx файлы, которые затем компилируются в .js. Если в качестве значения будет указано "preserve", то компилятор преобразует .tsx в .jsx, которые сохраняют XML-подобный синтаксис. Если указать значение "react-native", то компилятор преобразует файлы .tsx в требующийся .js.

ts

{ "compilerOptions": { "jsx": "react" | "react-native" | "preserve" } }

type: string
default: preserve
values: react, react-native, preserve

jsxFactory

--jsxFactory — данная опция позволяет при трансляции файлов .tsx в .js переопределить фабрику рендера.

ts

// default // from file .tsx import * as React from "react"; <h1>Ok</h1>

ts

// to file .js "use strict"; exports.__esModule = true; var React = require("react"); React.createElement("h1", null, "Ok");

Установив желаемое значение текущей опции появляется возможность переопределить функцию рендера React на любую другую.

ts

// set options jsxFactory to dom // from file .tsx import dom from "dom"; <h1>Ok</h1>

ts

// set options jsxFactory to dom // to file .js "use strict"; /** @jsx renderer */ exports.__esModule = true; var dom = require("dom"); dom["default"]("h1", null, "Ok");

Кроме того, подобного поведения можно добиться при помощи нотации /** @jsx identifier */, которая указывается в начале файла, а вместо identifier вписывается имя функции рендера.

ts

// from file .tsx /** @jsx renderer */ import renderer from "renderer"; <h1>Ok</h1>

ts

// to file .js "use strict"; /** @jsx renderer */ exports.__esModule = true; var renderer = require("renderer"); renderer["default"]("h1", null, "Ok");

Помимо этого, аннотация /** jsx identifier */ позволяет переопределить функцию рендера, переопределенную с помощью опции --jsxFactory.

ts

{ "compilerOptions": { "jsxFactory": "React.createElement" } }

type: string
default: React.createElement
values: "*"

target (t)

--target, или сокращенно -t — указывает компилятору, с какой версией спецификации должен быть совместим генерируемый JavaScript код. По умолчанию установлена совместимость с ES3. Кроме того, можно указывать совместимость с ES5, ES2015 (она же ES6), ES2016, ES2017, ESNext. Стоит добавить, что ESNext равноценно latest version.

ts

{ "compilerOptions": { "target": "es3" } }

type: string
default: es3
values: es3, es5, es6 / es2015, es2016, es2017, esnext

extends

extends — с помощью этого свойства можно расширять конфигурацию tsconfig.json.

ts

// tsconfig.base.json { "compilerOptions": { "target": "es2015" } }

ts

// tsconfig.json { "extends": "./tsconfig.base.json" }

type: string
default: ""
values: *

Кроме того, при использовании механизма расширения (extends) поиск файла конфигурации tsconfig.json может осуществляться по пакетам (packages) NodeJS модулей, находящихся в директории node_modules.

ts

// tsconfig.json { "extends": "some-npm-module" } // or { "extends": "some-npm-module/some-tsconfig.json" }

Алгоритм разрешения аналогичен алгоритму поиска модулей самого NodeJS. Проще говоря, если путь, указанный в качестве значения атрибута extends не будет найден в директории node_modules, находящейся в текущей директории, то поиск продолжится в директории node_modules вверх по дереву. Но есть одна особенность, которая заключается в том, что при разрешении пути компилятор tsc, зайдя в директорию node_modules, сначала проверяет package.json на наличие атрибута tsconfig, которому в качестве значения указывают путь до конфигурационного файла. Если атрибут tsconfig найден, то конфигурация, на которую он ссылается, будет установлена в качестве расширяемой. Если package.json не содержит атрибут tsconfig, то в качестве расширяемого конфигурационного файла будет выбран файл tsconfig.json, находящийся в корне директории. Если в корне директории файла tsconfig.json найдено не будет, то поиск продолжится вверх по дереву.

ts

/project /node_modules /some-module package.json // with attr "tsconfig": "tsconfig.custom.json" tsconfig.custom.json tsconfig.json tsconfig.json // "extends": "some-module" // в этом случае в качестве расширяемого конфигурационного файла будет выбран файл находящийся по пути /node_modules/some-module/tsconfig.custom.json

ts

/project /node_modules /some-module package.json // without attr "tsconfig" tsconfig.custom.json tsconfig.json tsconfig.json // "extends": "some-module" // в этом случае в качестве расширяемого конфигурационного файла будет выбран файл находящийся по пути /node_modules/some-module/tsconfig.json

ts

/project /node_modules /some-module package.json // without attr "tsconfig" tsconfig.custom.json tsconfig.json tsconfig.json // "extends": "some-module/tsconfig.custom.json" // в этом случае в качестве расширяемого конфигурационного файла будет выбран файл находящийся по пути /node_modules/some-module/tsconfig.custom.json

alwaysStrict

--alwaysStrict — данная опция говорит компилятору, что рассматривать и генерировать код нужно с учетом строгого режима “use strict”.

ts

{ "compilerOptions": { "alwaysStrict": false } }

type: boolean
default: false
values: true, false

strictNullChecks

--strictNullChecks — активировав эту опцию, компилятор не позволяет указывать в качестве значения типы Null и Undefined, если они не были указаны в аннотации.

ts

{ "compilerOptions": { "strictNullChecks": false } }

type: boolean
default: false
values: true, false

stripInternal

--stripInternal — когда данная опция активна, компилятор не создает деклараций .d.ts для файлов, помеченных как /** @internal */

ts

{ "compilerOptions": { "stripInternal": false } }

type: boolean
default: false
values: true, false

noImplicitThis

--noImplicitThis — в активном состоянии запрещает использование this в местах, не предусмотренных контекстом.

ts

{ "compilerOptions": { "noImplicitThis": false } }

type: boolean
default: false
values: true, false

Пример с неактивной опцией

ts

function f1(){ this.name = 'newName'; // Ok -> context T1 window } function f2(this: T1){ this.name = 'newName'; // Ok -> context T1 } this.name = 'newName'; // Error -> context window class T1 { public name: string; public m1(name: string): void { this.name = name; // Ok -> context T1 } }

Пример с активной опцией

ts

function f1(){ this.name = 'newName'; // Error -> context T1 window } function f2(this: T1){ this.name = 'newName'; // Ok -> context T1 } this.name = 'newName'; // Error -> context window class T1 { public name: string; public m1(name: string): void { this.name = name; // Ok -> context T1 } }

noImplicitUseStrict

--noImplicitUseStrict — при активной опции ошибки будут выводиться в случаях, при которых в поток компиляции попадут файлы, содержащие ‘use strict’. Кроме того, скомпилированные файлы также не будут содержать указание ‘use strict’.

ts

{ "compilerOptions": { "noImplicitUseStrict": false } }

type: boolean
default: false
values: true, false

baseUrl

--baseUrl — указывает базовый путь, относительно которого будет производиться поиск модулей.

ts

{ "compilerOptions": { "baseUrl": "" } }

type: string
default: ""
values: base path

ts

// m1 module ./node_modules/m1 // tsconfig.json "baseUrl": "./node_modules" // index.js import M1 from 'm1';

paths

--paths — с помощью этой опции создаются псевдонимы для используемых в программе модулей.

ts

{ "compilerOptions": { "paths": { "name": [ “path/to/lib” ] } } }

type: object
default: null
values: {[key]: *}

Пример

ts

// tsconfig.json { "compilerOptions": { "paths": { "jquery": ["node_modules/jquery/dest/jquery.min.js"] } } } // or // tsconfig.json { "compilerOptions": { "baseUrl": "./node_modules", "paths": { "jquery": ["jquery/dest/jquery.min.js"] } } } import jquery from 'jquery'; // or // tsconfig.json { "compilerOptions": { "baseUrl": "./node_modules", "paths": { "jQ": ["jquery/dest/jquery.min.js"] } } } import jquery from 'jQ';

rootDir

--rootDir — с помощью этой опции можно ограничить область выборки файлов для компиляции. В качестве значения выступает строка — путь до конкретной директории или файла.

ts

{ "compilerOptions": { "rootDir": "" } }

type: string
default: ""
values: path to dir with .ts files

rootDirs

--rootDirs — с помощью этой опции можно ограничить область выборки файлов для компиляции. В качестве значения принимается массив с путями до директорий и файлов.

ts

{ "compilerOptions": { "rootDirs": [ ] } }

type: array[ ]
default: null
values: path to dir with .ts files

traceResolution

--traceResolution — в случае активной текущей опции, при компиляции будет выводиться информация о собираемых модулях.

ts

{ "compilerOptions": { "traceResolution": false } }

type: boolean
default: false
values: true, false

lib

--lib — с помощью этой опции можно управлять конструкциями, которые включены в ту или иную версию ES.

ts

{ "compilerOptions": { "lib": [ ] } }

type: string[ ]
default: for es5 [dom, es5, ScriptHost], for es6 [dom, es6, dom.Iterable, ScriptHost]
values: dom, webworker, es5, es6 / es2015, es2015.core, es2015.collection, es2015.iterable, ,es2015.promise ,es2015.proxy ,es2015.reflect ,es2015.generator ,es2015.symbol ,es2015.symbol.wellknown ,es2016 ,es2016.array.include ,es2017 ,es2017.object ,es2017.sharedmemory ,scripthost

noLib

--noLib — не использует декларацию lib.d.ts по умолчанию.

ts

{ "compilerOptions": { "noLib": false } }

type: boolean
default: false
values: true, false

noResolve

--noResolve — данная опция говорит компилятору не компилировать файлы, которые не были указаны в командной строке.

ts

// terminal tsc index.js T1 --noResolve

ts

// index.js import T1 from './T1'; // Ok import T2 from './T2'; // Error

noStrictGenericChecks

--noStrictGenericChecks — отключает строгую проверку параметров типа для функциональных типов.

ts

{ "compilerOptions": { "noStrictGenericChecks": false } }

type: boolean
default: false
values: true, false

preserveConstEnums

--preserveConstEnums — говорит компилятору не удалять из исходного кода перечисления (enum), объявленные как const.

ts

{ "compilerOptions": { "preserveConstEnums": false } }

type: boolean
default: false
values: true, false

Пример с неактивной опцией

ts

// .ts const enum Animal { Bird = 'bird', Fish = 'fish' } let greeting: string = `Hello ${ Animal.Bird }!`;

ts

// .js let greeting = `Hello ${"bird" /* Bird */}!`;

Пример с активной опцией

ts

// .ts const enum Animal { Bird = 'bird', Fish = 'fish' } let greeting: string = `Hello ${ Animal.Bird }!`;

ts

// .js var Animal; (function (Animal) { Animal["Bird"] = "bird"; Animal["Fish"] = "fish"; })(Animal || (Animal = {})); let greeting = `Hello ${"bird" /* Bird */}!`;

removeComments

--removeComments — удаляет комментарии из сгенерированного .js.

ts

{ "compilerOptions": { "removeComments": false } }

type: boolean
default: false
values: true, false

noUnusedLocals

--noUnusedLocals — активная опция заставляет компилятор выводить сообщения о неиспользуемых элементах кода. Простыми словами, если в коде что-то объявлено, но не используется, будет возникать ошибка.

ts

{ "compilerOptions": { "noUnusedLocals": false } }

type: boolean
default: false
values: true, false

Пример

ts

import T1 from "./T1"; // Error let v0: number; // Warning let v1: number = 0; // Warning function f /** Warning */ ( ){ let lv0: number; // Warning let lv1: string = 0; // Error f(); } class C /**Error */ { private f0: number; // Warning private f1: number; // Warning private f2: number = 0; // Warning constructor( ) { this.f0 = 0; let c: C = new C(); // Warning } private m0 /** Warning */ (){} // Warning private m1 /** Warning */ (){ // Warning this.m1(); } }

noUnusedParameters

--noUnusedParameters — данная опция заставляет компилятор выводить ошибки, если в коде будут найдены функции, чьи параметры не используются (за исключением параметров идентификаторы которых начинаются с нижней черты, например, _prop).

ts

{ "compilerOptions": { "noUnusedParameters": false } }

type: boolean
default: false
values: true, false

Пример

ts

function f ( p0: number /** Warning */, p1: number /** Warning */, p2: number = 0 /** Warning */ ){ p1 = 0; } class C { constructor( p0: number /** Warning */, p1: number /** Warning */, p2: number = 0 /** Warning */ ) {} private m ( p0: number /** Warning */, p1: number /** Warning */, p2: number = 0 /** Warning */ ){ p1 = 0; } }

skipLibCheck

--skipLibCheck — при активной опции, компилятор перестает проверять типы в файлах библиотеках с расширением .d.ts, что экономит время, но может привести к редким ошибкам, связанным с типами.

ts

{ "compilerOptions": { "skipLibCheck": false } }

type: boolean
default: false
values: true, false

declarationDir

--declarationDir — указывает директорию, откуда будут подключаться или в которую будут создаваться файлы декларации .d.ts.

ts

{ "compilerOptions": { "declarationDir": "" } }

type: string
default: ""
values: path to dir with .d.ts

types

--types — декларации, которые размещены в /node_modules/@types/ и чьи идентификаторы перечислены в массиве, будут доступны глобально. В случае указания пустого массива, глобальный доступ к декларациям будет запрещен. К декларациям, которые запрещены глобально, можно получить доступ только путем импортирования модуля описываемого декларацией.

ts

{ "compilerOptions": { "types": [ "node", "express", "rxjs" ] } }

type: string[ ]
default: null
values: lib identifier

Важно — все примеры ниже производились после установки декларации. npm i -D @types/react

Пример с отключенной опцией

ts

// tsconfig.json { "compilerOptions": { } }

ts

// index.js class T1 extends React.Component {} // Ok -> global import {Component} from 'react'; class T2 extends Component {} // Ok -> import

Пример с пустым массивом

ts

// tsconfig.json { "compilerOptions": { "types": [ ] } }

ts

// index.js class T1 extends React.Component {} // Error -> global import {Component} from 'react'; class T2 extends Component {} // Ok -> import

Пример с установленным значением

ts

// tsconfig.json { "compilerOptions": { "types": [ "react" ] } }

ts

// index.js class T1 extends React.Component {} // Ok -> global import {Component} from 'react'; class T2 extends Component {} // Ok -> import

typeRoots

--typeRoots — ожидает массив путей до директорий с декларациями.

ts

{ "compilerOptions": { "typeRoots": [ "./types" ] } }

type: string[ ]
default: null
values: path to .d.ts

allowUnusedLabels

--allowUnusedLabels — в случае, если флаг --allowUnusedLabels не активен, при выявлении неиспользуемых label возникают ошибки.

ts

{ "compilerOptions": { "allowUnusedLabels": false } }

type: boolean
default: false
values: true, false

noImplicitReturns

--noImplicitReturns — функции, имеющие возвращаемый тип, отличный от типа void, фактически могут не возвращать значение явно. Другими словами, что бы удовлетворять условиям данной опции, в теле функции должен присутствовать лишь оператор return. Но при активной текущей опции, функции будут обязаны возвращать значение явно.

ts

{ "compilerOptions": { "noImplicitReturns": false } }

type: boolean
default: false
values: true, false

Пример

ts

// noImplicitReturns === false function f(value: number): number{ if (value) { return; // Ok } // Ok }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return; // Error } }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return value; // Ok } // Error }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return value; // Ok } return; // Error }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return value; // Ok } return 0; // Ok }

noFallthroughCasesInSwitch

--noFallthroughCasesInSwitch — при активной опции в случае, если блок кода case имеет код, при этом не имеет выхода из него (break или return), возникнет ошибка.

ts

{ "compilerOptions": { "noFallthroughCasesInSwitch": false } }

type: boolean
default: false
values: true, false

Пример

ts

function isAdmin( value: string ){ switch (value) { case 'user': // If noFallthroughCasesInSwitch === false then Ok if( nodeenv.mode === 'dev' ){ console.log( `...` ); } case 'moderator': return false; case 'admin': return true; } } function isAdmin( value: string ){ switch (value) { case 'user': // If noFallthroughCasesInSwitch === true then Error if( nodeenv.mode === 'dev' ){ console.log( `...` ); } case 'moderator': return false; case 'admin': return true; } }

outFile

--outFile — компилятор, при условии, что в качестве модулей указанно amd или system, будет сохранять все скомпилированные модули в один файл, указанный в качестве значения опции.

ts

{ "compilerOptions": { "outFile": "" } }

type: string
default: ""
values: path to bundle

до компиляции

ts

// T1.ts export default class T1 {} // T2.ts import T1 from './T1'; export default class T2 extends T1 {} // index.js import T2 from './T2'; const v1: T2 = new T2();

после компиляции

ts

define("T1", ["require", "exports"], function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class T1 { } exports.default = T1; }); define("T2", ["require", "exports", "T1"], function (require, exports, T1_1) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class T2 extends T1_1.default { } exports.default = T2; }); define("index", ["require", "exports", "T2"], function (require, exports, T2_1) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const v1 = new T2_1.default(); });

allowSyntheticDefaultImports

--allowSyntheticDefaultImports — позволяет предотвращать ошибки, которые возникают во время сборки по причине несовместимости SystemJS и CommonJS. Дело в том, что в ES6 синтаксисе есть возможность экспорта по умолчанию (export default), после компиляции которого CommonJS испытывает трудности, так как не знает, что такое default. Чаще всего проблема возникает в случая, когда разработка ведется с применением одних модулей, а подключаемые библиотеки используют другие.

ts

{ "compilerOptions": { "allowSyntheticDefaultImports": false } }

type: boolean
default: false
values: true, false

allowUnreachableCode

--allowUnreachableCode — если значение данной опции выставлено в true, то при обнаружении неиспользуемого кода будет выводиться сообщение об ошибке.

ts

{ "compilerOptions": { "allowUnreachableCode": false } }

type: boolean
default: false
values: true, false

Пример

ts

function f1(value: number): void { throw new Error(''); console.log(''); // Error - Unreachable code detected } function f2() { return { value: '' // Error - Unreachable code detected } }

allowJs

--allowJs — в случае, когда код, одна часть которого написана на TypeScript, а другая на JavaScript, требуется собрать в общий файл, достаточно активировать текущую опцию.

ts

{ "compilerOptions": { "allowJs": false } }

type: boolean
default: false
values: true, false

Пример

ts

// sun.js export default function sum(a, b){ return a + b; } // index.js import sum from './sum'; let result: number = sum(1, 1);

reactNamespace

--reactNamespace — позволяет установить фабрику рендера .jsx синтаксиса.

ts

{ "compilerOptions": { "reactNamespace": "" } }

type: string
default: ""
values: "*"

Пример

ts

// index.js import {jsxFactory} from "jsxFactory"; const div = <div>Hello JSX!</div>; // after compile "use strict"; var jsxFactory_1 = require("jsxFactory"); var div = jsxFactory_1.jsxFactory.createElement("div", null, "Hello JSX!");

pretty

--pretty — раскрашивает в разные цвета выводимые в консоль сообщения, делая их более понятными.

ts

{ "compilerOptions": { "pretty": true } }

type: boolean
default: true
values: true, false

moduleResolution

--moduleResolution — позволяет конкретизировать поведение модулей.

ts

{ "compilerOptions": { "moduleResolution": "node" } }

type: string
default: module === AMD | System | ES6 ? classic : node
values: classic, node

exclude

exclude — в обычной ситуации под компиляцию рекурсивно попадают все файлы, которые включает в себя директория, содержащая tsconfig.json. Решением этой проблемы является свойство exclude, определенное в корне конфигурационного файла. В качестве его значения выступает массив с путями к файлам или директориям, которые следует исключить из компиляции.

type: string[ ]
default: null
values: path to file or dir

noEmitHelpers

--noEmitHelpers — после компиляции файлов с расширением .ts каждый скомпилированный файл .js (модуль) содержит, если в этом есть необходимость, вспомогательный код (проще говоря, helpers), который помогает решить проблему совместимости версий ES. В большей степени этот код, находящийся в разных файлах (модулях), идентичен. Простыми словами, helpers повторяются от файла к файлу. Компилятор вынужден добавлять повторяющийся код, что бы гарантировать работу каждого модуля по отдельности. Но если модули собираются в одну общую сборку, активация текущего флага укажет компилятору, что helpers нужно вынести в отдельный модуль, который будет доступен в зависящих от него частях кода. Это поможет избавиться от дублирования кода и сократит размер собранного файла.

ts

{ "compilerOptions": { "noEmitHelpers": false } }

type: boolean
default: false
values: true, false

newLine

--newLine — по умолчанию, новая строка обозначается rn на Windows и r на nix системах. Для переопределения поведения используется данная опция.

ts

{ "compilerOptions": { "newLine": "LF" } }

type: string
default: platform specific
values: CRLF, LF

inlineSourceMap

--inlineSourceMap — активная опция приводит к тому, что source maps записываются inline в .js файлы, а не выносятся в отдельные файлы .map.js.

ts

{ "compilerOptions": { "inlineSourceMap": false } }

type: boolean
default: false
values: true, false

inlineSources

--inlineSources — при активной опции, источник source map включается в файл вместе c source map. Работает в паре с опцией --inlineSourceMap.

ts

{ "compilerOptions": { "inlineSources": false } }

type: boolean
default: false
values: true, false

noEmitHelpers

--noEmitHelpers — после компиляции файлов с расширением .ts каждый скомпилированный файл .js (модуль) содержит, если в этом есть необходимость, вспомогательный код (проще говоря, helpers), который помогает решить проблему совместимости версий ES. В большей степени этот код, находящийся в разных файлах (модулях), идентичен. Простыми словами, helpers повторяются от файла к файлу. Компилятор вынужден добавлять повторяющийся код, что бы гарантировать работу каждого модуля по отдельности. Но если модули собираются в одну общую сборку, активация текущего флага укажет компилятору, что helpers нужно вынести в отдельный модуль, который будет доступен в зависящих от него частях кода. Это поможет избавиться от дублирования кода и сократит размер собранного файла.

ts

{ "compilerOptions": { "noEmitHelpers": false } }

type: boolean
default: false
values: true, false

newLine

--newLine — по умолчанию, новая строка обозначается rn на Windows и r на nix системах. Для переопределения поведения используется данная опция.

ts

{ "compilerOptions": { "newLine": "LF" } }

type: string
default: platform specific
values: CRLF, LF

inlineSourceMap

--inlineSourceMap — активная опция приводит к тому, что source maps записываются inline в .js файлы, а не выносятся в отдельные файлы .map.js.

ts

{ "compilerOptions": { "inlineSourceMap": false } }

type: boolean
default: false
values: true, false

inlineSources

--inlineSources — при активной опции, источник source map включается в файл вместе c source map. Работает в паре с опцией --inlineSourceMap.

ts

{ "compilerOptions": { "inlineSources": false } }

type: boolean
default: false
values: true, false

noEmitOnError

--noEmitOnError — несмотря на ошибки в TypeScript коде, компилятор все равно генерирует .js файлы. Для того, что бы компилятор генерировал файлы .js только в случае успешной компиляции, нужно активировать данную опцию.

ts

{ "compilerOptions": { "noEmitOnError": false } }

type: boolean
default: false
values: true, false

noEmit

--noEmit — при активной опции информация о компиляции перестает выводиться.

ts

{ "compilerOptions": { "noEmit": false } }

type: boolean
default: false
values: true, false

charset

--charset — устанавливает формат входных файлов.

ts

{ "compilerOptions": { "charset": "" } }

type: string
default: utf8
values: *

diagnostics

--diagnostics — выводит диагностическую информацию.

ts

{ "compilerOptions": { "diagnostics": false } }

type: boolean
default: false
values: true, false

declarationDir

--declarationDir — указывает директорию, откуда будут подключаться или в которую будут создаваться файлы декларации .d.ts.

ts

{ "compilerOptions": { "declarationDir": "" } }

type: string
default: ""
values: path to dir with .d.ts

types

--types — декларации, которые размещены в /node_modules/@types/ и чьи идентификаторы перечислены в массиве, будут доступны глобально. В случае указания пустого массива, глобальный доступ к декларациям будет запрещен. К декларациям, которые запрещены глобально, можно получить доступ только путем импортирования модуля описываемого декларацией.

ts

{ "compilerOptions": { "types": [ "node", "express", "rxjs" ] } }

type: string[ ]
default: null
values: lib identifier

Важно — все примеры ниже производились после установки декларации. npm i -D @types/react

Пример с отключенной опцией

ts

// tsconfig.json { "compilerOptions": { } }

ts

// index.js class T1 extends React.Component {} // Ok -> global import {Component} from 'react'; class T2 extends Component {} // Ok -> import

Пример с пустым массивом

ts

// tsconfig.json { "compilerOptions": { "types": [ ] } }

ts

// index.js class T1 extends React.Component {} // Error -> global import {Component} from 'react'; class T2 extends Component {} // Ok -> import

Пример с установленным значением

ts

// tsconfig.json { "compilerOptions": { "types": [ "react" ] } }

ts

// index.js class T1 extends React.Component {} // Ok -> global import {Component} from 'react'; class T2 extends Component {} // Ok -> import

typeRoots

--typeRoots — ожидает массив путей до директорий с декларациями.

ts

{ "compilerOptions": { "typeRoots": [ "./types" ] } }

type: string[ ]
default: null
values: path to .d.ts

allowUnusedLabels

--allowUnusedLabels — в случае, если флаг --allowUnusedLabels не активен, при выявлении неиспользуемых label возникают ошибки.

ts

{ "compilerOptions": { "allowUnusedLabels": false } }

type: boolean
default: false
values: true, false

noImplicitReturns

--noImplicitReturns — функции, имеющие возвращаемый тип, отличный от типа void, фактически могут не возвращать значение явно. Другими словами, что бы удовлетворять условиям данной опции, в теле функции должен присутствовать лишь оператор return. Но при активной текущей опции, функции будут обязаны возвращать значение явно.

ts

{ "compilerOptions": { "noImplicitReturns": false } }

type: boolean
default: false
values: true, false

Пример

ts

// noImplicitReturns === false function f(value: number): number{ if (value) { return; // Ok } // Ok }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return; // Error } }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return value; // Ok } // Error }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return value; // Ok } return; // Error }

ts

// noImplicitReturns === true function f(value: number): number{ if (value) { return value; // Ok } return 0; // Ok }

noFallthroughCasesInSwitch

--noFallthroughCasesInSwitch — при активной опции в случае, если блок кода case имеет код, при этом не имеет выхода из него (break или return), возникнет ошибка.

ts

{ "compilerOptions": { "noFallthroughCasesInSwitch": false } }

type: boolean
default: false
values: true, false

Пример

ts

function isAdmin( value: string ){ switch (value) { case 'user': // If noFallthroughCasesInSwitch === false then Ok if( nodeenv.mode === 'dev' ){ console.log( `...` ); } case 'moderator': return false; case 'admin': return true; } } function isAdmin( value: string ){ switch (value) { case 'user': // If noFallthroughCasesInSwitch === true then Error if( nodeenv.mode === 'dev' ){ console.log( `...` ); } case 'moderator': return false; case 'admin': return true; } }

outFile

--outFile — компилятор, при условии, что в качестве модулей указанно amd или system, будет сохранять все скомпилированные модули в один файл, указанный в качестве значения опции.

ts

{ "compilerOptions": { "outFile": "" } }

type: string
default: ""
values: path to bundle

до компиляции

ts

// T1.ts export default class T1 {} // T2.ts import T1 from './T1'; export default class T2 extends T1 {} // index.js import T2 from './T2'; const v1: T2 = new T2();

после компиляции

ts

define("T1", ["require", "exports"], function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class T1 { } exports.default = T1; }); define("T2", ["require", "exports", "T1"], function (require, exports, T1_1) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class T2 extends T1_1.default { } exports.default = T2; }); define("index", ["require", "exports", "T2"], function (require, exports, T2_1) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const v1 = new T2_1.default(); });

allowSyntheticDefaultImports

--allowSyntheticDefaultImports — позволяет предотвращать ошибки, которые возникают во время сборки по причине несовместимости SystemJS и CommonJS. Дело в том, что в ES6 синтаксисе есть возможность экспорта по умолчанию (export default), после компиляции которого CommonJS испытывает трудности, так как не знает, что такое default. Чаще всего проблема возникает в случая, когда разработка ведется с применением одних модулей, а подключаемые библиотеки используют другие.

ts

{ "compilerOptions": { "allowSyntheticDefaultImports": false } }

type: boolean
default: false
values: true, false

allowUnreachableCode

--allowUnreachableCode — если значение данной опции выставлено в true, то при обнаружении неиспользуемого кода будет выводиться сообщение об ошибке.

ts

{ "compilerOptions": { "allowUnreachableCode": false } }

type: boolean
default: false
values: true, false

Пример

ts

function f1(value: number): void { throw new Error(''); console.log(''); // Error - Unreachable code detected } function f2() { return { value: '' // Error - Unreachable code detected } }

allowJs

--allowJs — в случае, когда код, одна часть которого написана на TypeScript, а другая на JavaScript, требуется собрать в общий файл, достаточно активировать текущую опцию.

ts

{ "compilerOptions": { "allowJs": false } }

type: boolean
default: false
values: true, false

Пример

ts

// sun.js export default function sum(a, b){ return a + b; } // index.js import sum from './sum'; let result: number = sum(1, 1);

reactNamespace

--reactNamespace — позволяет установить фабрику рендера .jsx синтаксиса.

ts

{ "compilerOptions": { "reactNamespace": "" } }

type: string
default: ""
values: "*"

Пример

ts

// index.js import {jsxFactory} from "jsxFactory"; const div = <div>Hello JSX!</div>; // after compile "use strict"; var jsxFactory_1 = require("jsxFactory"); var div = jsxFactory_1.jsxFactory.createElement("div", null, "Hello JSX!");

pretty

--pretty — раскрашивает в разные цвета выводимые в консоль сообщения, делая их более понятными.

ts

{ "compilerOptions": { "pretty": true } }

type: boolean
default: true
values: true, false

moduleResolution

--moduleResolution — позволяет конкретизировать поведение модулей.

ts

{ "compilerOptions": { "moduleResolution": "node" } }

type: string
default: module === AMD | System | ES6 ? classic : node
values: classic, node

exclude

exclude — в обычной ситуации под компиляцию рекурсивно попадают все файлы, которые включает в себя директория, содержащая tsconfig.json. Решением этой проблемы является свойство exclude, определенное в корне конфигурационного файла. В качестве его значения выступает массив с путями к файлам или директориям, которые следует исключить из компиляции.

type: string[ ]
default: null
values: path to file or dir

noEmitHelpers

--noEmitHelpers — после компиляции файлов с расширением .ts каждый скомпилированный файл .js (модуль) содержит, если в этом есть необходимость, вспомогательный код (проще говоря, helpers), который помогает решить проблему совместимости версий ES. В большей степени этот код, находящийся в разных файлах (модулях), идентичен. Простыми словами, helpers повторяются от файла к файлу. Компилятор вынужден добавлять повторяющийся код, что бы гарантировать работу каждого модуля по отдельности. Но если модули собираются в одну общую сборку, активация текущего флага укажет компилятору, что helpers нужно вынести в отдельный модуль, который будет доступен в зависящих от него частях кода. Это поможет избавиться от дублирования кода и сократит размер собранного файла.

ts

{ "compilerOptions": { "noEmitHelpers": false } }

type: boolean
default: false
values: true, false

newLine

--newLine — по умолчанию, новая строка обозначается rn на Windows и r на nix системах. Для переопределения поведения используется данная опция.

ts

{ "compilerOptions": { "newLine": "LF" } }

type: string
default: platform specific
values: CRLF, LF

inlineSourceMap

--inlineSourceMap — активная опция приводит к тому, что source maps записываются inline в .js файлы, а не выносятся в отдельные файлы .map.js.

ts

{ "compilerOptions": { "inlineSourceMap": false } }

type: boolean
default: false
values: true, false

inlineSources

--inlineSources — при активной опции, источник source map включается в файл вместе c source map. Работает в паре с опцией --inlineSourceMap.

ts

{ "compilerOptions": { "inlineSources": false } }

type: boolean
default: false
values: true, false

noEmitOnError

--noEmitOnError — несмотря на ошибки в TypeScript коде, компилятор все равно генерирует .js файлы. Для того, что бы компилятор генерировал файлы .js только в случае успешной компиляции, нужно активировать данную опцию.

ts

{ "compilerOptions": { "noEmitOnError": false } }

type: boolean
default: false
values: true, false

noEmit

--noEmit — при активной опции информация о компиляции перестает выводиться.

ts

{ "compilerOptions": { "noEmit": false } }

type: boolean
default: false
values: true, false

charset

--charset — устанавливает формат входных файлов.

ts

{ "compilerOptions": { "charset": "" } }

type: string
default: utf8
values: *

diagnostics

--diagnostics — выводит диагностическую информацию.

ts

{ "compilerOptions": { "diagnostics": false } }

type: boolean
default: false
values: true, false

declaration

--declaration — генерирует файлы декларации .d.ts из .ts файлов.

ts

{ "compilerOptions": { "declaration": false } }

type: boolean
default: false
values: true, false

downlevelIteration

--downlevelIteration — при активной опции становится возможно использовать итераторы при компиляции в версии ниже ES6. Помимо самих итераторов, становятся доступны и нововведения (for...of, Array Destructuring, Spread и т.д.), которые построены с их использованием.

ts

{ "compilerOptions": { "downlevelIteration": false } }

type: boolean
default: false
values: true, false

emitBOM

--emitBOM — Извлекает маркер последовательности байтов UTF-8 (BOM) в начале выходных файлов.

ts

{ "compilerOptions": { "emitBOM": false } }

type: boolean
default: false
values: true, false

emitDecoratorMetadata

--emitDecoratorMetadata — …

ts

{ "compilerOptions": { "emitDecoratorMetadata": false } }

type: boolean
default: false
values: true, false

forceConsistentCasingInFileNames

--forceConsistentCasingInFileNames — запрещает несогласованные ссылки на один и тот же файл.

ts

{ "compilerOptions": { "forceConsistentCasingInFileNames": false } }

type: boolean
default: false
values: true, false

help (h)

--help или -h — выводит список доступных опций.

importHelpers

--importHelpers — импортирует таких помощников (helpers), как __extends, __rest и т.д.

ts

{ "compilerOptions": { "importHelpers": false } }

type: boolean
default: false
values: true, false

isolatedModules

--isolatedModules — транслирует каждый файл, как отдельный модуль.

ts

{ "compilerOptions": { "isolatedModules": false } }

type: boolean
default: false
values: true, false

listEmittedFiles

--listEmittedFiles — выводит список сгенерированных файлов.

ts

{ "compilerOptions": { "listEmittedFiles": false } }

type: boolean
default: false
values: true, false

listFiles

--listFiles — выводит список участвующих в компиляции файлов.

ts

{ "compilerOptions": { "listFiles": false } }

type: boolean
default: false
values: true, false

sourceRoot

--sourceRoot — в качестве значения принимает базовый путь до директории, в которой лежат исходники .ts, необходимые для ассоциации с source map.

ts

{ "compilerOptions": { "sourceRoot": "" } }

type: string
default: ""
values: path to source .ts dir

mapRoot

--mapRoot — место, откуда будут браться файлы .map.js.

ts

{ "compilerOptions": { "mapRoot": "" } }

type: string
default: ""
values: «

maxNodeModuleJsDepth

--maxNodeModuleJsDepth — максимальная глубина поиска зависимостей в /node_modules и загрузки файлов .js. Работает только с активной опцией --allowJs.

ts

{ "compilerOptions": { "maxNodeModuleJsDepth": 0 } }

type: number
default: 0
values: 0...n

project (p)

--project или -p — с помощью этого флага можно указать как путь до директории, которая содержит tsconfig.json, так и на конкретный tsconfig.json файл.

ts

tsc --project tsc -p ./configs/tsconfig.es6.json

type: string
default: «
values: path to tsconfig.json

init

--init — создает новый tsconfig.json со всеми доступными опциями, большинство из которых закомментировано, дабы создать оптимальную конфигурацию.

version (v)

--version или -v — выводит информацию о текущей версии TypeScript.

watch (w)

--watch или -w — запускает компилятор в режиме наблюдения за изменением файлов. При каждом изменении отслеживаемых файлов компиляция будет запущена автоматически.

preserveSymlinks

--preserveSymlinks — текущая опция демонстрирует поведение, идентичное реализуемому в NodeJS с активным флагом --preserve-symlinks. При активной опции символические ссылки на модели (modules) и пакеты (packages) разрешаются относительно файла символической ссылки, а не относительно пути, к которому разрешается символическая ссылка. Кроме того, поведение при активной текущей опции противоположно поведению, предоставляемому Webpack с помощью флага со схожим по смыслу названием resolve.symlinks.

ts

{ "compilerOptions": { "preserveSymlinks": false } }

type: boolean
default: false
values: true, false

strictFunctionTypes

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

ts

{ "compilerOptions": { "strictFunctionTypes": false } }

type: boolean
default: false
values: true, false

locale

--locale — позволяет указать один из заданных языков для вывода диагностических сообщений.

ts

{ "compilerOptions": { "locale": "en" | "cs" | "de" | "es" | "fr" | "it" | "ja" | "ko" | "pl" | "pt-BR" | "ru" | "tr" | "zh-CN" | "zh-TW" | } }

type: string
default: platform specific
values: English (US): en,Czech: cs,German: de,Spanish: es,French: fr,Italian: it,Japanese: ja,Korean: ko,Polish: pl,Portuguese(Brazil): pt-BR,Russian: ru,Turkish: tr,Simplified Chinese: zh-CN,Traditional Chinese: zh-TW

strictPropertyInitialization

--strictPropertyInitialization — при активной опции в случае, когда в классе присутствуют поля, не инициализированные в момент создания или в конструкторе, возникает ошибка. Более подробно данная тема раскрыта в главе “Классы — Definite Assignment Assertion Modifier”.

ts

{ "compilerOptions": { "strictPropertyInitialization": false } }

type: boolean
default: false
values: true, false

ts

class Identifier { public a: number = 0; // Ok, инициализация при объявлении public b: number; // Ok, инициализация в конструкторе public c: number | undefined; // Ok, явное указание принадлежности к типу Undefined public d: number; // Error, инициализация отсутствует constructor() { this.b = 0; } }

esModuleInterop

--esModuleInterop — с активной опцией сгенерированный код таких модулей формата CommonJS/AMD/UMD больше походит на код, сгенерированный Babel.

ts

{ "compilerOptions": { "esModuleInterop": false } }

type: boolean
default: false
values: true, false

emitDeclarationsOnly

--emitDeclarationsOnly — данная опция указывает компилятору, что нужно генерировать только файлы декларации с расширением .d.ts и пропускать файлы с расширением .js и .jsx. Такое поведение может быть полезно, если код, помимо компилятора TypeScript, компилируется ещё и с помощью Babel.

ts

{ "compilerOptions": { "emitDeclarationsOnly": false } }

type: boolean
default: false
values: true, false

resolveJsonModule

--resolveJsonModule — данная опция, при активной опции --esModuleInterop
и опции --module, установленной в commonjs, позволяет в среде NodeJS полноценно взаимодействовать с json.

ts

{ "compilerOptions": { "resolveJsonModule": false } }

type: boolean
default: false
values: true, false

ts

// file config.json { "name": "", "age": 0 } // file index.js import config from "./config.json"; config.name = 'name'; // Ok config.name = 0; // Error // tsconfig.json { "compilerOptions": { "module": "commonjs", "resolveJsonModule": true, "esModuleInterop": true } }

declarationMap

--declarationMap — при совместном использовании с активной опцией --declaration заставляет компилятор, помимо .d.ts, также генерировать .d.ts.map, которые позволяют при переходе к определению (go to definition) направлять в файл .ts, а не .d.ts.

ts

{ "compilerOptions": { "declarationMap": false } }

type: boolean
default: false
values: true, false

strictBindCallApply

--strictBindCallApply — текущий флаг, входящий в группировку --strict, активирует проверку вызова таких методов, как apply, call и bind. Это стало возможным благодаря добавлению двух новых типов, CallableFunction и NewableFunction, которые содержат обобщенное описание методов apply, call и bind, как для обычных функций, так и для функций конструкторов соответственно.

ts

{ "compilerOptions": { "strictBindCallApply": false } }

type: boolean
default: false
values: true, false

ts

function f(p0: number, p1: string){} f.call(null, 0, ''); // ok f.call(null, 0, 0); // error f.call(null, 0); // error f.call(null, 0, '', 0); // error f.apply(null, [0, '']); // ok f.apply(null, [0, 0]); // error f.apply(null, [0]); // error f.apply(null, [0, '', 0]); // error f.bind(null, 0, ''); // ok f.bind(null, 0, 0); // error f.bind(null, 0); // ok f.bind(null, 0, '', 0); // ok

showConfig

--showConfig — при активном текущем флаге компилятор tsc во время компиляции выведет в консоль содержимое конфигурационного файла tsconfig.json, разрешенного с учетом механизма расширения (extends), если таковой механизм имеет место быть. Этот функционал может быть очень полезным при отладке.

ts

{ "compilerOptions": { "showConfig": false } }

type: boolean
default: false
values: true, false

build

--build — данный флаг указывает компилятору tsc, что проект нужно собирать как проект, использующий ссылки на другие проекты. Подробнее об этом можно узнать из главы Сборка с использованием ссылок на проекты. Также флаг --build может использоваться в сочетании со специфичными только для него флагами --verbose, --dry, --clean, --force, а также с флагом --watch.

type: string
default: «
values: paths to tsconfig.json or dir with tsconfig.json

verbose

--verbose — текущий флаг указывает компилятору выводить более подробный отчет при инкрементальной сборке проекта. Используется только совместно с флагом --build.

dry

--dry — при указании текущего флага сборка будет выполнена без порождения выходных файлов. Данный флаг полезно использовать совместно с флагом --verbose. Используется только совместно с флагом --build.

clean

--clean — удаляет выходные файлы, соответствующие заданным входным. Используется только совместно с флагом --build.

forceConsistentCasingInFileNames

--forceConsistentCasingInFileNames — запрещает несогласованные ссылки на один и тот же файл.

ts

{ "compilerOptions": { "forceConsistentCasingInFileNames": false } }

type: boolean
default: false
values: true, false

help (h)

--help или -h — выводит список доступных опций.

importHelpers

--importHelpers — импортирует таких помощников (helpers), как __extends, __rest и т.д.

ts

{ "compilerOptions": { "importHelpers": false } }

type: boolean
default: false
values: true, false

isolatedModules

--isolatedModules — транслирует каждый файл, как отдельный модуль.

ts

{ "compilerOptions": { "isolatedModules": false } }

type: boolean
default: false
values: true, false

listEmittedFiles

--listEmittedFiles — выводит список сгенерированных файлов.

ts

{ "compilerOptions": { "listEmittedFiles": false } }

type: boolean
default: false
values: true, false

listFiles

--listFiles — выводит список участвующих в компиляции файлов.

ts

{ "compilerOptions": { "listFiles": false } }

type: boolean
default: false
values: true, false

sourceRoot

--sourceRoot — в качестве значения принимает базовый путь до директории, в которой лежат исходники .ts, необходимые для ассоциации с source map.

ts

{ "compilerOptions": { "sourceRoot": "" } }

type: string
default: ""
values: path to source .ts dir

mapRoot

--mapRoot — место, откуда будут браться файлы .map.js.

ts

{ "compilerOptions": { "mapRoot": "" } }

type: string
default: ""
values: «

maxNodeModuleJsDepth

--maxNodeModuleJsDepth — максимальная глубина поиска зависимостей в /node_modules и загрузки файлов .js. Работает только с активной опцией --allowJs.

ts

{ "compilerOptions": { "maxNodeModuleJsDepth": 0 } }

type: number
default: 0
values: 0...n

project (p)

--project или -p — с помощью этого флага можно указать как путь до директории, которая содержит tsconfig.json, так и на конкретный tsconfig.json файл.

ts

tsc --project tsc -p ./configs/tsconfig.es6.json

type: string
default: «
values: path to tsconfig.json

init

--init — создает новый tsconfig.json со всеми доступными опциями, большинство из которых закомментировано, дабы создать оптимальную конфигурацию.

version (v)

--version или -v — выводит информацию о текущей версии TypeScript.

watch (w)

--watch или -w — запускает компилятор в режиме наблюдения за изменением файлов. При каждом изменении отслеживаемых файлов компиляция будет запущена автоматически.

preserveSymlinks

--preserveSymlinks — текущая опция демонстрирует поведение, идентичное реализуемому в NodeJS с активным флагом --preserve-symlinks. При активной опции символические ссылки на модели (modules) и пакеты (packages) разрешаются относительно файла символической ссылки, а не относительно пути, к которому разрешается символическая ссылка. Кроме того, поведение при активной текущей опции противоположно поведению, предоставляемому Webpack с помощью флага со схожим по смыслу названием resolve.symlinks.

ts

{ "compilerOptions": { "preserveSymlinks": false } }

type: boolean
default: false
values: true, false

strictFunctionTypes

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

ts

{ "compilerOptions": { "strictFunctionTypes": false } }

type: boolean
default: false
values: true, false

locale

--locale — позволяет указать один из заданных языков для вывода диагностических сообщений.

ts

{ "compilerOptions": { "locale": "en" | "cs" | "de" | "es" | "fr" | "it" | "ja" | "ko" | "pl" | "pt-BR" | "ru" | "tr" | "zh-CN" | "zh-TW" | } }

type: string
default: platform specific
values: English (US): en,Czech: cs,German: de,Spanish: es,French: fr,Italian: it,Japanese: ja,Korean: ko,Polish: pl,Portuguese(Brazil): pt-BR,Russian: ru,Turkish: tr,Simplified Chinese: zh-CN,Traditional Chinese: zh-TW

strictPropertyInitialization

--strictPropertyInitialization — при активной опции в случае, когда в классе присутствуют поля, не инициализированные в момент создания или в конструкторе, возникает ошибка. Более подробно данная тема раскрыта в главе “Классы — Definite Assignment Assertion Modifier”.

ts

{ "compilerOptions": { "strictPropertyInitialization": false } }

type: boolean
default: false
values: true, false

ts

class Identifier { public a: number = 0; // Ok, инициализация при объявлении public b: number; // Ok, инициализация в конструкторе public c: number | undefined; // Ok, явное указание принадлежности к типу Undefined public d: number; // Error, инициализация отсутствует constructor() { this.b = 0; } }

esModuleInterop

--esModuleInterop — с активной опцией сгенерированный код таких модулей формата CommonJS/AMD/UMD больше походит на код, сгенерированный Babel.

ts

{ "compilerOptions": { "esModuleInterop": false } }

type: boolean
default: false
values: true, false

emitDeclarationsOnly

--emitDeclarationsOnly — данная опция указывает компилятору, что нужно генерировать только файлы декларации с расширением .d.ts и пропускать файлы с расширением .js и .jsx. Такое поведение может быть полезно, если код, помимо компилятора TypeScript, компилируется ещё и с помощью Babel.

ts

{ "compilerOptions": { "emitDeclarationsOnly": false } }

type: boolean
default: false
values: true, false

resolveJsonModule

--resolveJsonModule — данная опция, при активной опции --esModuleInterop
и опции --module, установленной в commonjs, позволяет в среде NodeJS полноценно взаимодействовать с json.

ts

{ "compilerOptions": { "resolveJsonModule": false } }

type: boolean
default: false
values: true, false

ts

// file config.json { "name": "", "age": 0 } // file index.js import config from "./config.json"; config.name = 'name'; // Ok config.name = 0; // Error // tsconfig.json { "compilerOptions": { "module": "commonjs", "resolveJsonModule": true, "esModuleInterop": true } }

declarationMap

--declarationMap — при совместном использовании с активной опцией --declaration заставляет компилятор, помимо .d.ts, также генерировать .d.ts.map, которые позволяют при переходе к определению (go to definition) направлять в файл .ts, а не .d.ts.

ts

{ "compilerOptions": { "declarationMap": false } }

type: boolean
default: false
values: true, false

strictBindCallApply

--strictBindCallApply — текущий флаг, входящий в группировку --strict, активирует проверку вызова таких методов, как apply, call и bind. Это стало возможным благодаря добавлению двух новых типов, CallableFunction и NewableFunction, которые содержат обобщенное описание методов apply, call и bind, как для обычных функций, так и для функций конструкторов соответственно.

ts

{ "compilerOptions": { "strictBindCallApply": false } }

type: boolean
default: false
values: true, false

ts

function f(p0: number, p1: string){} f.call(null, 0, ''); // ok f.call(null, 0, 0); // error f.call(null, 0); // error f.call(null, 0, '', 0); // error f.apply(null, [0, '']); // ok f.apply(null, [0, 0]); // error f.apply(null, [0]); // error f.apply(null, [0, '', 0]); // error f.bind(null, 0, ''); // ok f.bind(null, 0, 0); // error f.bind(null, 0); // ok f.bind(null, 0, '', 0); // ok

showConfig

--showConfig — при активном текущем флаге компилятор tsc во время компиляции выведет в консоль содержимое конфигурационного файла tsconfig.json, разрешенного с учетом механизма расширения (extends), если таковой механизм имеет место быть. Этот функционал может быть очень полезным при отладке.

ts

{ "compilerOptions": { "showConfig": false } }

type: boolean
default: false
values: true, false

build

--build — данный флаг указывает компилятору tsc, что проект нужно собирать как проект, использующий ссылки на другие проекты. Подробнее об этом можно узнать из главы Сборка с использованием ссылок на проекты. Также флаг --build может использоваться в сочетании со специфичными только для него флагами --verbose, --dry, --clean, --force, а также с флагом --watch.

type: string
default: «
values: paths to tsconfig.json or dir with tsconfig.json

verbose

--verbose — текущий флаг указывает компилятору выводить более подробный отчет при инкрементальной сборке проекта. Используется только совместно с флагом --build.

dry

--dry — при указании текущего флага сборка будет выполнена без порождения выходных файлов. Данный флаг полезно использовать совместно с флагом --verbose. Используется только совместно с флагом --build.

clean

--clean — удаляет выходные файлы, соответствующие заданным входным. Используется только совместно с флагом --build.

force

--force — принудительно выполняет не инкрементальную сборку. Используется только совместно с флагом --build.

incremental

--incremental — флаг, при активации которого, после первой компиляции проекта, в заданной атрибутом outDir директории создается файл .tsbuildinfo, который хранит метаинформацию об изменении файлов, что позволяет производить ускоренные инкрементальные сборки при всех последующих запусках компилятора.

ts

{ "compilerOptions": { "incremental": true, "outDir": "./dest" } }

В случае, когда имя выходного файла задается с помощью флага --outFile, имя генерируемого файла .tsbuildinfo будет включать в себя название выходного файла (.client.tsbuildinfo для файла client.js и .server.tsbuildinfo для server.js соответственно).

Примечание: создатели TypeScript заранее предупреждают, что генерируемые файлы .tsbuildinfo не предназначены для использования сторонними библиотеками, так как их определение не будет обладать совместимостью от версии к версии.

Кроме того, с помощью флага --tsBuildInfoFile можно задать место сохранения файла .tsbuildinfo.

ts

{ "compilerOptions": { "incremental": true, "tsBuildInfoFile": "./buildinfo", "outDir": "./dest" } }

tsBuildInfoFile

--tsBuildInfoFile — флаг, с помощью которого указывается место сохранения файла .tsbuildinfo, генерирующегося при активной опции --incremental и служащего для хранения метаинформации, призванной ускорить последующие сборки.

ts

{ "compilerOptions": { "incremental": true, "tsBuildInfoFile": "./buildinfo", } }

allowUmdGlobalAccess

--allowUmdGlobalAccess — при активном текущем флаге становится возможным обращение к глобальным определениям из модулей.

ts

{ "compilerOptions": { "allowUmdGlobalAccess": false, } }

type: boolean
default: false
values: true, false

ts

// allowUmdGlobalAccess === false import * as Rx from 'rxjs'; const ref = React.createRef(); // Error, обращение к глобальным переменным в модулях недопустимо

ts

// allowUmdGlobalAccess === true import * as Rx from 'rxjs'; const ref = React.createRef(); // Ok, доступ к глобальному определению из модуля

disableSourceOfProjectReferenceRedirect

--disableSourceOfProjectReferenceRedirect — при использовании механизма ссылок на проекты активация данного флага говорит компилятору, что в качестве информации о типах следует использовать файлы декларации .d.ts, а не исходные файлы проекта. Активация данного флага способна повысить производительность сборки, но вносит некоторую специфику, поэтому уместна лишь на больших проектах. Более подробно читайте об этом в главе, посвященной использованию ссылок на проекты.

ts

{ "compilerOptions": { "disableSourceOfProjectReferenceRedirect": false, } }

type: boolean
default: false
values: true, false

useDefineForClassFields

--useDefineForClassFields — данный флаг активирует новое поведение генерации конечного кода, доступное с версии v3.7 и предназначенное для предотвращения переопределения свойств при механизме наследования.

[Важно] Начиная с версии 4.0 логика компилятора TypeScript подразумевает не переопределяемое поведение равнозначное поведению при активном текущем флаге.

ts

{ "compilerOptions": { "useDefineForClassFields": false, } }

type: boolean
default: false
values: true, false

importsNotUsedAsValues

--importsNotUsedAsValues — задает стратегию используемую компилятором для разрешения зависимостей модуля путем уточнения формы импорта и экспорта. Более подробно о текущем флаге можно прочесть в главе «Импорт и экспорт только типа и флаг —importsNotUsedAsValues».

ts

{ "compilerOptions": { "importsNotUsedAsValues": "remove", } }

type: string
default: remove
values: remove, preserve, error

assumeChangesOnlyAffectDirectDependencies

--assumeChangesOnlyAffectDirectDependencies — в режиме --watch + --incremental активация данной опции позволяет компилятору отказаться от перепроверокперестраивания файлов, которые на основе метаинформации расцениваются затронутыми. Вместо этого будут перепроверятьсяперестраиваться только непосредственно изменённые файлы и файлы их импортирующие.

Представьте, что fileA.ts импортирует fileB.ts, который импортирует fileC.ts, который импортирует fileD.td.

При активном режиме --watch изменения в файле fileD.ts означает, что как минимум будут проверены fileC.ts, fileB.ts и fileA.ts. При активной опции --assumeChangesOnlyAffectDirectDependencies проверке подвергнется лишь fileA.ts и fileB.ts.

json

// tsconfig.json { "watchOptions": { "assumeChangesOnlyAffectDirectDependencies": "false" } }

type: boolean
default: false
values: true, false

watchFile

--watchFile — стратегия наблюдения за отдельными файлами.

json

// tsconfig.json { "watchOptions": { "watchFile": "useFsEvents" } }

type: string
default: useFsEvents
values: fixedPollingInterval, priorityPollingInterval, dynamicPriorityPolling, useFsEvents, useFsEventsOnParentDirectory

описание

  • fixedPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду с фиксированным интервалом.
  • priorityPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду, но использовать эвристику для проверки файлов определенных типов реже, чем других.
  • dynamicPriorityPolling: Использовать динамическую очередь, в которой менее часто изменяемые файлы будут проверяться реже.
  • useFsEvents [ПО УМОЛЧАНИЮ]: Пытаться использовать собственные события операционной системы / файловой системы для изменения файлов.
  • useFsEventsOnParentDirectory: Пытаться использовать собственные события операционной системы/файловой системы для прослушивания изменений в каталогах, содержащих файл. Это может использовать меньше файловых наблюдателей, но также быть менее точным.

watchDirectory

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

json

// tsconfig.json { "watchOptions": { "watchDirectory": "useFsEvents" } }

type: string
default: useFsEvents
values: fixedPollingInterval, dynamicPriorityPolling, useFsEvents

описание

  • fixedPollingInterval: Проверять каждый каталог на наличие изменений несколько раз в секунду с фиксированным интервалом.
  • dynamicPriorityPolling: Использовать динамическую очередь, в которой менее часто изменяемые каталоги будут проверяться реже.
  • useFsEvents[ПО УМОЛЧАНИЮ]: Пытаться использовать собственные события операционной системы / файловой системы для изменений каталога.

fallbackPolling

--fallbackPolling — при использовании событий файловой системы этот параметр определяет стратегию опроса, которая используется, когда в системе заканчиваются собственные наблюдатели файлов и/или не поддерживаются собственные средства просмотра файлов.

json

// tsconfig.json { "watchOptions": { "fallbackPolling": "dynamicPriorityPolling" } }

type: string
default: useFsEvents
values: fixedPollingInterval, dynamicPriorityPolling, priorityPollingInterval

описание

  • fixedPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду с фиксированным интервалом.
  • dynamicPriorityPolling: Использовать динамическую очередь, в которой менее часто изменяемые файлы будут проверяться реже.
  • priorityPollingInterval: Проверять каждый файл на наличие изменений несколько раз в секунду, но использовать эвристику для проверки файлов определенных типов реже, чем других.

synchronousWatchDirectory

--synchronousWatchDirectory — отключить отложенное наблюдение за каталогами.

json

// tsconfig.json { "watchOptions": { "synchronousWatchDirectory": "false" } }

type: boolean
default: false
values: true, false

noUncheckedIndexedAccess

--noUncheckedIndexedAccess — при активной текущей опции обращаться к динамическим членам объекта разрешается только после подтверждения их существования, а также совместно с такими механизмами как опциональный оператор !. или оператор опциональной последовательности ?. .

json

// @filename: tsconfig.json { "watchOptions": { "noUncheckedIndexedAccess": "true" } }

type: boolean
default: true
values: true, false

json

// @filename: tsconfig.json { "compilerOptions": { "noUncheckedIndexedAccess": false } }

ts

type T = { [key: string]: number | string; } function f(p: T) { /** * Обращение к несуществующим полям */ p.bad.toString(); // Ok -> Ошибка времени исполнения p[Math.random()].toString(); // Ok -> Ошибка времени исполнения }

json

// @filename: tsconfig.json { "compilerOptions": { "noUncheckedIndexedAccess": true } }

ts

type T = { [key: string]: number | string; } function f0(p: T) { /** * Обращение к несуществующим полям */ p.bad.toString(); // Error -> Object is possibly 'undefined'.ts(2532) p[Math.random()].toString(); // Error -> Object is possibly 'undefined'.ts(2532) // Проверка наличия поля bad if("bad" in p){ p.bad?.toString(); // Ok } // Использование опционального оператора p[Math.random()]!.toString(); // Ok -> ошибка во время выполнения p[Math.random()]?.toString(); // Ok -> Ошибка не возникнет } function f1(array: string[]) { for(let i = 0; i < array.length; i++){ array[i].toString(); // Error -> Object is possibly 'undefined'. } }

noPropertyAccessFromIndexSignature

--noPropertyAccessFromIndexSignature — активирует поведение запрещающее обращение через точечную нотацию к динамическим членам объекта определяющего строковую индексную сигнатуру,

json

// @filename: tsconfig.json { "compilerOptions": { "noPropertyAccessFromIndexSignature": "false" } }

type: boolean
default: false
values: true, false

ts

type Settings = { env?: string[]; // определение необязательного предопределенного поля [key: string]: any; // определение динамических полей } function configurate(settings: Settings){ //--------------------------- // динамическое поле if(settings.envs){ // Ошибка при активном флаге и Ok при не активном } if(settings['envs']){ // Ok при любом значении флага } //---------------------------- // предопределенное поле if(settings.env){ // Ok [1] } if(settings['env']){ // Ok при любом значении флага } }

explainFiles

--explainFiles — команда, позволяющая выводить информацию о зависимостях проекта не только в консоль, но и файл, или даже открывать в visual studio code.

bash

// вывод в файл tsc --explainFiles > explanation.txt // вывод в редактор vsc tsc --explainFiles | code -

noImplicitOverride

--noImplicitOverride — активирует механизм предотвращающий объявление суперклассом членов уже объявленных в его потомках.

json

// @filename: tsconfig.json { "compilerOptions": { "noImplicitOverride": "false" } }

type: boolean
default: false
values: true, false

useUnknownInCatchVariables

--useUnknownInCatchVariables — при активном флаге единственный параметр блока catch принадлежит к типу unknown. Иначе, к типу any.
Данный флаг входит в состав группировки strict.

json

// @filename: tsconfig.json { "compilerOptions": { "useUnknownInCatchVariables": "true" } }

ts

try { }catch(error){ /** * useUnknownInCatchVariables === true - error is unknown * useUnknownInCatchVariables === false - error is any */ }

type: boolean
default: true
values: true, false

exactOptionalPropertyTypes

--exactOptionalPropertyTypes — при активном флаге запрещается присваивать значение undefined необязательным полям объекта без явной принадлежности к типу undefined.

json

// @filename: tsconfig.json { "compilerOptions": { "exactOptionalPropertyTypes": "false" } }

ts

// exactOptionalPropertyTypes = true type T = { a: number; b?: string; } let o: T = { a: 5, b: undefined // Error -> Type 'undefined' is not assignable to type 'string'.ts(2322) };

type: boolean
default: false
values: true, false

preserveValueImports

--preserveValueImports — отключение механизма исключающего из сборки импортированные, но не используемые конструкции.

json

// @filename: tsconfig.json { "compilerOptions": { "preserveValueImports": "false" } }

type: boolean
default: false
values: true, false

moduleSuffixes

--moduleSuffixes — указывает правила для разрешения модулей на основе расширений.

json

{ "compilerOptions": { "moduleSuffixes": [".ios", ".native", ""] } }

При конфигурации выше, код ниже..

ts

import * as x from "./x";

..будет разрешен таким образом, что сначала осуществится поиск ./x.ios, затем ./x.native и наконец ./x.ts.
Стоит обратить внимает, что указание пустой строки в качестве элемента параметра moduleSuffixes требуется для указания поиска файлов с расширением .ts и это значение является значение по умолчанию.

type: string
default: [""]
values: .*

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Typeerror unsupported operand type s for str and str как исправить
  • Typeerror unsupported operand type s for str and int ошибка
  • Typeerror str object cannot be interpreted as an integer python ошибка
  • Typeerror nonetype object is not subscriptable python ошибка
  • Typeerror nonetype object is not iterable python как исправить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии