TypeScript: Mettre tsconfig sur les étagères. Partie 1

Je suis un grand fan de TypeScript. Je préfère écrire chaque nouveau projet dedans, plutôt qu'en pur JavaScript. Dans cet article, je ne discuterai pas des raisons du choix de TypeScript ni de ses avantages et inconvénients. Je veux que cet article serve comme une sorte de feuille de triche pour tous ceux qui veulent comprendre comment personnaliser tsconfig



, trier ses nombreux drapeaux et peut-être apprendre quelques astuces utiles.





Donc, dans cet article, je veux fournir une compression révisée et ordonnée de la documentation, qui, j'en suis sûr, sera utile à ceux qui commencent tout juste leur voyage dans le monde TypeScript ou à ceux qui, jusqu'à présent, n'ont pas a trouvé le temps et l'énergie de comprendre les détails et veut maintenant combler cet écart.





Si vous ouvrez la référence officielle tsconfig



, il y aura une liste complète de tous les paramètres, divisés en groupes. Cependant, cela ne permet pas de comprendre par où commencer et ce qui est nécessaire à partir de cette longue liste d'options, et ce que vous pouvez ignorer (du moins pour le moment). De plus, les options sont parfois regroupées selon une signification technique plutôt que logique. Par exemple, certains indicateurs de contrôle peuvent être trouvés dans un groupe Strict Checks



, certains dans Linter Checks



et d'autres dans Advanced



. Ce n'est pas toujours facile à comprendre.





Toutes les options, ainsi que l'article lui-même, je les ai divisées en deux groupes - de base et «contrôles». Dans la première partie de l'article, nous parlerons des paramètres de base, et dans la seconde, de diverses vérifications, c'est-à-dire du réglage de la rigueur du compilateur.





Structure de Tsconfig

Considérons la structure et certaines fonctionnalités de la configuration.





  • tsconfig.json



    se compose de deux parties. Certaines options doivent être spécifiées dans root



    , et d'autres danscompilerOptions







  • tsconfig.json



    prend en charge les commentaires. Les IDE comme WebStorm et Visual Studio Code en sont conscients et ne mettent pas en évidence les commentaires comme des erreurs de syntaxe





  • tsconfig.json



    prend en charge l'héritage. Les options peuvent être divisées selon un principe, décrites dans différents fichiers et combinées à l'aide d'une directive spéciale





Voici notre disque tsconfig.json



:





{
  // extends        
  //  tsconfig-checks.json     
  "extends": "./tsconfig-checks.json",
  //     project-specific 
  "compilerOptions": {
    //   ,   
  }
}
      
      



root



: extends



, files



, include



, exclude



, references



, typeAcquisition



. 4. compilerOptions



.





root



compileOnSave



ts-node



. IDE .





root

extends

Type: string | false, default: false.





. , . , . , , . , tsconfig.json



:





{
  "compilerOptions": {
    //   

    //   
  }
}
      
      



use-case, . production development . tsconfig-dev.json



:





{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    //  ,     dev 
    "sourceMap": true,
    "watch": true
  }
}
      
      



, extends



. , . . , .





. , tsc --showConfig



.





files

Type: string[] | false, default: false, include



.





.





{
  "compilerOptions": {},
  "files": [
    "core.ts",
    "app.ts"
  ]
}
      
      



.





include

Type string[], default: files



, exclude



.





files



, TypeScript . include



, ["**/*"]



. , . , . , .





{
  "compilerOptions": {},
  "include": [
    "src/**/*",
    "tests/**/*"
  ]
}
      
      



, TypeScript .ts



, .tsx



.d.ts



. allowJs



, .js



.jsx



.





src



, ./src



, src/**/*



. ./src



.





, include



exclude



, TypeScript files



. tsc --showConfig



.





exclude

Type: string[], default: ["node_modules", "bower_components", "jspm_packages"].





, , include



. , npm



, bower



jspm



, . , TypeScript outDir



, . , . , . , . . , .





{
  "compilerOptions": {},
  "exclude": [
    "node_modules",
    "./src/**/*.spec.ts"
  ]
}
      
      



exclude



, files



.





exclude



, , .





compilerOptions

target

Type: string, default: ES3



, lib



, module



.





ECMAScript, . : ES3



, ES5



, ES6



( ES2015



), ES2016



, ES2017



, ES2018



, ES2019



, ES2020



, ESNext



. backend / ES6



, Node.js



ES5



, . ES6



, , 97.29% . frontend .





module

Type: string, default: target



, moduleResolution



.





, . : None



, CommonJS



, AMD



, System



, UMD



, ES6



, ES2015



, ES2020



or ESNext



. backend / ES6



CommonJS



Node.js



, . frontend ES6



. , UMD



.





, - .





moduleResolution

Type: string, default: module



.





, . : node



classic



. classic



99% , legacy. , , . module



moduleResolution



classic



.





, node



.





lib

Type: string[], default: target



.





target



, TypeScript (*.d.ts-



) . , target



ES6



, TypeScript array.find



, . target



ES5



, find



, JavaScript. . , , TypeScript , , lib



. , ES2015



, ES2015.Core



( find



, findIndex



. .).





, , .





 --target ES5 : DOM, ES5, ScriptHost
 --target ES6: DOM, ES6, DOM.Iterable, ScriptHost
      
      



- lib



. , , DOM



:





{
  "compilerOptions": {
    "target": "ES5",
    "lib": [
      "DOM",
      "ES2015.Core"
    ]
  }
}
      
      



outDir

Type: string, default: .





, . : .js



, .d.ts



, .js.map



. , . .gitignore



. . , .





outDir



:





├── module
│   └── core.js
│   └── core.ts
├── index.js
└── index.ts
      
      



outDir



:





├── dist
│   └── module|   └── core.js
│   └── index.js
├── module
│   └── core.ts
└── index.ts
      
      



outFile

Type: string, default: none.





, . , webpack



… , module



None



, System



, or AMD



. , CommonJS



or ES6



. outFile



. , , .





allowSyntheticDefaultImports

Type: boolean, default: module



esModuleInterop



.





- default import



, ts-loader



babel-loader



. , d.ts-



. , :





//   
import * as React from 'react';
//   
import React from 'react';
      
      



, esModuleInterop



module



=== "system".





esModuleInterop

Type: boolean, default: false.





, CommonJS



ES6



.





//  moment    CommonJS
//     ES6
import Moment from 'moment';

//   esModuleInterop  undefined
console.log(Moment);

// c   [object Object]
console.log(Moment);
      
      



allowSyntheticDefaultImports



. .





alwaysStrict

Type: boolean, default: strict



.





strict mode



“use strict”



.





false, strict



, true.





downlevelIteration

Type: boolean, default: false.





ES6



: for / of



, array spread



, arguments spread



. ES5



, for / of



for



:





//  es6
const str = 'Hello!';
for (const s of str) {
  console.log(s);
}
      
      



//  es5  downlevelIteration
var str = "Hello!";
for (var _i = 0, str_1 = str; _i < str_1.length; _i++) {
  var s = str_1[_i];
  console.log(s);
}
      
      



, , emoji



. . . , . downlevelIteration



"", . , . , playground target -> es5



, downlevelIteration -> true



.





, , Symbol.iterator



. .





forceConsistentCasingInFileNames

Type: boolean, default: false.





(case-sensitive) . , case-insensitive import FileManager from './FileManager.ts'



, fileManager.ts



, . . TypeScript - .





compilerOptions,

declaration

Type: boolean, default: false.





, JavaScript , -, d.ts



- . js . js



, d.ts



-. , , npm



. , JavaScript, TypeScript.





declarationDir

Type: string, default: none, declaration



.





js



-. d.ts



- .





emitDeclarationOnly

Type: boolean, default: false, declaration



.





- d.ts



-, js



-.





allowJs

Type: boolean, default: false.





JavaScript TypeScript . allowJs



TypeScript ts



, js



. , . , . TypeScript.





checkJs

Type: boolean, default: false, allowJs



.





TypeScript ts



, js



-. JavaScript, TS- jsDoc . , . , jsDoc, .





4.1 checkJs



, allowJs



.





experimentalDecorators emitDecoratorMetadata

Type: boolean, default: false.









- , -. , . , , , @



.





experimentalDecorators



, emitDecoratorMetadata



-, .





emitDecoratorMetadata



reflect-metadata.





resolveJsonModule

Type: boolean, default: false.





*.json



. .





//    .json
import config from './config.json'
      
      



jsx

Type: string, default: none.





React, jsx



. react



react-native



. jsx-



preserve



react-jsx



react-jsxdev



.





, . . .








All Articles