TS从入门到精通(八)tsconfig.json配置文件

603 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

配置文件

生成配置文件

tsc --init

image.png

  • target :"es2016" //代表编译的目标版本是es6
  • module:commonjs //模块化规范是commonjs规范
  • strict:true //严格模式开启
  • esModuleInterop:true // 允许export=导出,由import from 导入
  • skipLibCheck:true // 跳过所有.d.ts的类型检查文件。
  • forceConsistentCasingInFileNames // 确保导入文件名是正确的。
{
 "compilerOptions": {
   /* 访问 https://aka.ms/tsconfig.json 以阅读有关此文件的更多信息 */

   
   /* 基本选项 */
   "incremental": true,                   /* 启用增量编译 */
   "target": "ESNEXT",                    /* 指定 ECMAScript 目标版本:'ES3'、'ES5'(默认)、'ES2015'、'ES2016'、'ES2017'、'ES2018'、'ES2019'、'ES2020' 或 'ESNEXT'。 */
   "module": "commonjs",                  /* 指定模块代码生成:“none”、“commonjs”、“amd”、“system”、“umd”、“es2015”、“es2020”或“ESNext”。 */
   "lib": [],                             /* 指定要包含在编译中的库文件。 */
   "allowJs": true,                       /* 允许编译 javascript 文件。 */
   "checkJs": true,                       /* 报告 .js 文件中的错误。 */
   "jsx": "preserve",                     /* 指定 JSX 代码生成:'preserve'、'react-native' 或 'react'。 */
   "declaration": true,                   /* 生成相应的“.d.ts”文件。 */
   "declarationMap": true,                /* 为每个对应的“.d.ts”文件生成一个源映射。 */
   "sourceMap": true,                     /* 生成相应的“.map”文件。 */
   "outFile": "./",                       /* 连接输出到单个文件。 */
   "outDir": "./",                        /* 将输出结构重定向到目录。 */
   "rootDir": "./",                       /* 指定输入文件的根目录。用于通过 --outDir 控制输出目录结构。 */
   "composite": true,                     /* 启用项目编译 */
   "tsBuildInfoFile": "./",               /* 指定文件存放增量编译信息 */
   "removeComments": true,                /* 不要向输出发出注释(删除除代码注释)。 */
   "noEmit": true,                        /* 不发出输出(不生成编译后的文件)。 */
   "noEmitOnError": true,                 /* 在输出js代码时,如果有错将不编译文件。 */
   "importHelpers": true,                 /* 从 'tslib' 导入发射助手。 */
   "downlevelIteration": true,            /* 以“ES5”或“ES3”为目标时,为“for-of”、展开和解构中的迭代提供全面支持。 */
   "isolatedModules": true,               /* 将每个文件转换为一个单独的模块(类似于 'ts.transpileModule')。 */


   /* 严格的类型检查选项 */
   "strict": true,                        /* 启用所有严格的类型检查选项。 在开发中,建议将stricet这类选项都开启。 */
   "strictNullChecks": true,              /* 启用严格的空(undefined、null)检查,可以防止“未定义不是对象”。 建议开启*/
   "strictFunctionTypes": true,           /* 启用函数类型的严格检查。 */
   "strictBindCallApply": true,           /* 在函数上启用严格的“绑定”、“调用”、应用”方法。 */
   "strictPropertyInitialization": true,  /* 启用对类中属性初始化的严格检查。 */
   "noImplicitThis": true,                /* 使用隐含的“any”类型在“this”表达式上引发错误。 */
   "noImplicitAny": true,                 /* 使用隐含的“any”类型在表达式和声明上引发错误(主要用于控制变量、参数是否必须知道它们的类型【类型检查】),如果是将JavaScript迁移到TypeScript时,可以关闭此项,但不建议这样做。 */
   "alwaysStrict": true,                  /* 以严格模式解析并为每个源文件发出“使用严格”。 */


   /* 额外检查 */
   "noUnusedLocals": true,                /* 报告未使用的本地人的错误。 */
   "noUnusedParameters": true,            /* 报告未使用参数的错误。 */
   "noImplicitReturns": true,             /* 不是函数中的所有代码路径都返回值时报告错误。 */
   "noFallthroughCasesInSwitch": true,    /* 在 switch 语句中报告失败情况的错误。 */


   /* 模块分辨率选项 */
   "moduleResolution": "node",            /* 指定模块解析策略:'node' (Node.js) 或 'classic' (TypeScript pre-1.6)。 */
   "baseUrl": "./",                       /* 解析非绝对模块名称的基目录。 */
   "paths": {},                           /* 一系列将导入重新映射到相对于“baseUrl”的查找位置的条目。 */
   "rootDirs": [],                        /* 根文件夹列表,其组合内容代表运行时项目的结构。 */
   "typeRoots": [],                       /* 包含类型定义的文件夹列表。 */
   "types": [],                           /* 类型声明文件要包含在编译中。 */
   "allowSyntheticDefaultImports": true,  /* 允许从没有默认导出的模块中默认导入。 这不会影响代码发出,只是类型检查。 */
   "esModuleInterop": true,               /* 通过为所有导入创建命名空间对象,在 CommonJS 和 ES 模块之间启用发射互操作性。 暗示“allowSyntheticDefaultImports”。 */
   "preserveSymlinks": true,              /* 不解析符号链接的真实路径。 */
   "allowUmdGlobalAccess": true,          /* 允许从模块访问 UMD 全局变量。 */


   /* 源映射选项 */
   "sourceRoot": "",                      /* 指定调试器应该定位 TypeScript 文件而不是源位置的位置。 */
   "mapRoot": "",                         /* 指定调试器应该定位映射文件而不是生成位置的位置。 */
   "inlineSourceMap": true,               /* 发出带有源映射的单个文件而不是单独的文件。 */
   "inlineSources": true,                 /* 在单个文件中与源映射一起发出源; 需要设置“--inlineSourceMap”或“--sourceMap”。 */


   /* 实验选项 */
   "experimentalDecorators": true,        /* 启用对 ES7 装饰器的实验性支持。 */
   "emitDecoratorMetadata": true,         /* 为装饰器的发射类型元数据启用实验性支持。 */


   /* 高级选项 */
   "skipLibCheck": true,                     /* 跳过声明文件的类型检查。 */
   "forceConsistentCasingInFileNames": true  /* 禁止对同一文件的大小写不一致的引用。 */
 }
}

当然在项目中是不会有这么多的配置,常用的就几个下面是从一个vite项目中的tsconfig.json中截取的

   {
      //继承tsconfig.web.json配置
      "extends": "@vue/tsconfig/tsconfig.web.json",
      //编译src目录下所有文件
      "include": ["env.d.ts", "src/**/*"],
      // "exclude": ["src/LayOut/index.vue"],
      //编译器相关的选项
      "compilerOptions": {
        "baseUrl": ".",
        "types": ["node", "element-plus/global"],
        "paths": {
          "@/*": ["./src/*"]
        },
        // target 支持的值有:es3、es5、es6(也叫 es2015)、es2016 一直到 es2022
        "target": "ES2016", // 目标语言的版本
        //TypeScript 默认自带通用的 JS 内置 API 的类型声明,比如 Math、RegExp 等。
        //但 JS 运行的环境各种各样,会有一些特有的全局对象,比如浏览器下的 document,新的 ES 版本引入的新的 API。
        //我们可以用 lib 这个属性来设置需要引入的全局类型声明
        "lib": ["dom", "es5", "es2015.promise", "ES2016", "es2017"]
      },
      //reference:引用。项目中如果有多个相互独立的模块,可以使用这个属性来做分离。
      //这样一个模块改变后,就只重新编译这个模块,其他模块不重新编译。
      //编译时要改用 tsc --build。这在非常大的项目中应该能有不小收益。
      "references": [
        {
          "path": "./tsconfig.config.json"
        }
      ]
}

include 指定编译文件默认是编译当前目录下所有的ts文件

exclude 指定排除的文件

target 指定编译js 的版本例如es5 es6 es2020

allowJS 是否允许编译js文件

removeComments 是否在编译过程中删除文件中的注释

rootDir 编译文件的目录

outDir 输出的目录

strict 严格模式

module 模块化规范

更多详情配置查看TypeScript官网