10min代码快速熟悉Tsconfig.json配置文件

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【8月更文挑战第16天】10min代码快速熟悉Tsconfig.json配置文件

基础介绍

tsconfig.json简介

  • tsconfig.json 是 TypeScript 项目的配置文件。如果一个目录下存在一个 tsconfig.json 文件,那么往往意味着这个目录就是 TypeScript 项目的根目录。

  • tsconfig.json 包含 TypeScript 编译的相关配置,通过更改编译配置项,我们可以让 TypeScript 编译出 ES6ES5node 的代码。

    tsconfig.json 结构

    一个标准常用的配置文件,结构如下:

    {
         
    "compilerOptions": {
         },
    "files": [
    
    ],
    "include":{
         },
    "exclude":{
         }
    }
    
  • compilerOptions - 设置与编译流程相关的选项。

  • files - 设置要编译的文件的名称;
  • include - 设置需要进行编译的文件,支持路径模式匹配;
  • exclude - 设置无需进行编译的文件,支持路径模式匹配;

一些常见的脚手架的预设tsconfig.json如下:

VueCli

{
   
  "compilerOptions": {
   
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "importHelpers": true,
    "moduleResolution": "node",
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "baseUrl": ".",
    "types": [
      "webpack-env"
    ],
    "paths": {
   
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

Vite的react模板

{
   
  "compilerOptions": {
   
    "target": "ESNext",
    "lib": ["DOM", "DOM.Iterable", "ESNext"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src"],
  "references": [{
    "path": "./tsconfig.node.json" }]
}

files配置

在tsconfig中,可以使用 files 属性来指定需要编译的文件的列表。该属性接受一个数组,数组中的每个元素代表一个需要编译的文件路径。
如果我们仅需要编译项目中的以下文件

src/index.ts
src/app.ts
src/utils/helper.ts

可以在tsconfig中使用以下配置:

{
   
  "files": [
    "src/index.ts",        
    "src/app.ts",
    "src/utils/helper.ts"
  ]
}

当使用 files 属性时,TypeScript仅会编译这些文件,而不会自动寻找其他文件进行编译。因此,需要确保files选项中列出的文件完全包括项目中所有需要编译的文件。

注意:files配置只能针对单个文件配置,不能指定文件夹!指定文件夹可以使用include配置

include、exclude配置

在 tsconfig.json 中,可以使用 include 属性来指定需要编译的文件或者目录。该属性接受一个数组,数组中的每个元素代表一个需要编译的文件或者目录路径,支持通配符。
例如,要编译的文件如下:

src/index.ts
src/app.ts
src/utils/helper.ts

可以在 tsconfig.json 中使用以下配置:

{
  "include": [
    "src/**/*.ts"
  ]
}

这样,编译器会找到所有在 src 目录下的 .ts 文件进行编译,而不需要在 files 中手动列出每一个文件。
同时,还可以使用 exclude 属性来排除一些文件或目录,例如:

{
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "src/**/*.test.ts",
    "node_modules"
  ]
}

这样,在编译时,编译器会忽略所有的 test 文件和 node_modules 目录。
同时,include、exclude也可以直接指定文件夹

// 直接写文件夹名称指定文件夹
"include": ["src"],

// 通配符
"include": [
  "./src/**/*"
]

这上述代码的第二种方式中,我们使用了通配符 ** 来匹配 src 文件夹下的所有子文件夹和子文件,包括 src 文件夹本身。这样配置后,TypeScript compiler 会编译 src 下的所有 TypeScript 文件。

需要注意的是,当使用 include 和 exclude 选项时,files 选项都不再起效。

compilerOptions 配置

{
   
  "compilerOptions": {
   

    /* 基本选项 */
    "target": "es5",                       // 指定 ECMAScript 目标版本: 'ES3' (default), 'ES5', 'ES6'/'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'
    "module": "commonjs",                  // 指定使用模块: 'commonjs', 'amd', 'system', 'umd' or 'es2015'
    "lib": [],                             // 指定要包含在编译中的库文件
    "allowJs": true,                       // 允许编译 javascript 文件
    "checkJs": true,                       // 报告 javascript 文件中的错误
    "jsx": "preserve",                     // 指定 jsx 代码的生成: 'preserve', 'react-native', or 'react'
    "declaration": true,                   // 生成相应的 '.d.ts' 文件
    "sourceMap": true,                     // 生成相应的 '.map' 文件
    "outFile": "./",                       // 将输出文件合并为一个文件
    "outDir": "./",                        // 指定输出目录
    "rootDir": "./",                       // 用来控制输出目录结构 --outDir.
    "removeComments": true,                // 删除编译后的所有的注释
    "noEmit": true,                        // 不生成输出文件
    "importHelpers": true,                 // 从 tslib 导入辅助工具函数
    "isolatedModules": true,               // 将每个文件做为单独的模块 (与 'ts.transpileModule' 类似).

    /* 严格的类型检查选项 */
    "strict": true,                        // 启用所有严格类型检查选项
    "noImplicitAny": true,                 // 在表达式和声明上有隐含的 any类型时报错
    "strictNullChecks": true,              // 启用严格的 null 检查
    "noImplicitThis": true,                // 当 this 表达式值为 any 类型的时候,生成一个错误
    "alwaysStrict": true,                  // 以严格模式检查每个模块,并在每个文件里加入 'use strict'

    /* 额外的检查 */
    "noUnusedLocals": true,                // 有未使用的变量时,抛出错误
    "noUnusedParameters": true,            // 有未使用的参数时,抛出错误
    "noImplicitReturns": true,             // 并不是所有函数里的代码都有返回值时,抛出错误
    "noFallthroughCasesInSwitch": true,    // 报告 switch 语句的 fallthrough 错误。(即,不允许 switch 的 case 语句贯穿)

    /* 模块解析选项 */
    "moduleResolution": "node",            // 选择模块解析策略: 'node' (Node.js) or 'classic' (TypeScript pre-1.6)
    "baseUrl": "./",                       // 用于解析非相对模块名称的基目录
    "paths": {
   },                           // 模块名到基于 baseUrl 的路径映射的列表
    "rootDirs": [],                        // 根文件夹列表,其组合内容表示项目运行时的结构内容
    "typeRoots": [],                       // 包含类型声明的文件列表
    "types": [],                           // 需要包含的类型声明文件名列表
    "allowSyntheticDefaultImports": true,  // 允许从没有设置默认导出的模块中默认导入。

    /* Source Map Options */
    "sourceRoot": "./",                    // 指定调试器应该找到 TypeScript 文件而不是源文件的位置
    "mapRoot": "./",                       // 指定调试器应该找到映射文件而不是生成文件的位置
    "inlineSourceMap": true,               // 生成单个 soucemaps 文件,而不是将 sourcemaps 生成不同的文件
    "inlineSources": true,                 // 将代码与 sourcemaps 生成到一个文件中,要求同时设置了 --inlineSourceMap 或 --sourceMap 属性

    /* 其他选项 */
    "experimentalDecorators": true,        // 启用装饰器
    "emitDecoratorMetadata": true          // 为装饰器提供元数据的支持
  }
}

target配置详解

target 配置用来指定 TypeScript 编译器编译的 JavaScript 代码的 ECMAScript 版本目标。TypeScript 编译器将会把 TypeScript 代码编译为兼容指定目标 ECMAScript 版本的 JavaScript 代码。
示例配置:

{
  "compilerOptions": {
    "target": "es6"
  }
}

在这个示例中,target 配置被设置为 "es6",表示 TypeScript 编译器将会编译 TypeScript 代码为兼容 ECMAScript 6 标准的 JavaScript 代码。TypeScript 支持的可用的 target 选项包括:"es3"、"es5"、"es6"、"es2015"、"es2016"、"es2017"、"es2018"、"es2019"、"es2020"、"esnext"。
需要注意的是,越高的 ECMAScript 版本目标需要更高版本的 JavaScript 引擎支持,在旧的浏览器或者 Node.js 环境下,可能无法运行编译后的代码。如果需要兼容旧的 JavaScript 引擎,可以选择更低的 target 配置。

moduleResolution

moduleResolution是指定在解析模块时使用怎样的策略。可以配置为node(默认)或者classic。当使用node时,TypeScript会根据Node.js的模块解析规则解析模块。而使用classic时,TypeScript会根据传统JavaScript模块解析规则解析模块。下面是两种策略的配置:

// node策略
{
   
  "compilerOptions": {
   
    "moduleResolution": "node"
  }
}

// classic策略
{
   
  "compilerOptions": {
   
    "moduleResolution": "classic"
  }
}

在tsconfig.json配置文件中,"paths"选项用来配置模块解析的路径映射。它可以帮助我们使用别名的方式引入模块,方便代码的编写和维护。
下面是一个简单的"paths"选项的设置示例:

{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "@components/*": ["components/*"],
      "@utils/*": ["utils/*"],
      "@api/*": ["services/*"]
    }
  }
}

上面的配置中,"baseUrl"指定了所有相对路径的根路径为"./src","paths"指定了三个模块的路径映射。其中"@components/*"表示以"@components/"开头的模块都将被解析到"components/"目录下,以此类推。
这样配置之后,在代码中引入模块时,就可以使用"@"符号作为别名使用,如:

import Button from '@components/Button';
import { getData } from '@api/user';
import { formatDate } from '@utils/date';

以上这些模块在编译时都会成功解析到对应的路径下。

相关文章
|
6月前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
JSON 文字识别 API
ocr表格识别返回的json结果,转成excel,这个转化有对应的逻辑代码吗?
ocr表格识别返回的json结果,转成excel,这个转化有对应的逻辑代码吗?
522 0
|
1月前
|
JSON API 数据格式
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
40 0
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
|
3月前
|
JSON API 数据格式
基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
【8月更文挑战第25天】这段资料介绍了一个使用Python从服务器获取实时天气数据并解析JSON格式数据的基本框架。主要分为三个部分:一是安装必要的`requests`库以发起HTTP请求获取数据,同时利用Python内置的`json`库处理JSON数据;二是提供了具体的代码实现,包括获取天气数据的`get_weather_data`函数和解析数据的`parse_weather_data`函数;三是对代码逻辑进行了详细说明,包括如何通过API获取数据以及如何解析这些数据来获取温度和天气描述等信息。用户需要根据实际使用的天气API调整代码中的API地址、参数和字段名称。
|
5月前
|
JSON Java 数据格式
Java中创建Json对象的方法和详细代码
Java中创建Json对象的方法和详细代码
57 1
|
6月前
|
前端开发
【专栏】在前端开发中,package.json 文件是项目的重要配置文件,其中包含了许多与项目相关的信息和设置
【4月更文挑战第29天】`package.json`的`proxy`字段用于配置开发环境中的代理服务器,解决跨域问题并模拟后端响应。它是字符串类型,值为代理服务器地址。主要应用场景包括前端跨域请求和本地调试。配置时在`package.json`顶层添加`proxy`字段,如`"proxy": "http://localhost:8080"`。该配置仅在开发环境中生效,生产环境需另寻解决方案。
95 1
|
6月前
|
JSON 小程序 开发工具
【微信小程序】--JSON 配置文件作用(三)
【微信小程序】--JSON 配置文件作用(三)
|
SQL JSON API
PHP读取数据库记录转换为JSON的代码(API接口的SQL语句)
PHP读取数据库记录转换为JSON的代码(API接口的SQL语句)
145 0
|
6月前
|
JSON 前端开发 JavaScript
【问答系列】如何对后端返回的json格式化输出并且高亮代码
【问答系列】如何对后端返回的json格式化输出并且高亮代码
122 0
|
JSON 数据格式 Python
Python三行代码实现json转Excel
最近重保,经常需要通过Excel上报威胁事件。安全设备的告警很多都是json格式的,就需要将json转成Excel。 用Python将json转成excel也就三行代码的事,先将json串导入形成字典对象,再通过pandas转成DataFrame直接输出excel。
934 0
Python三行代码实现json转Excel