当前位置: 首页 > news >正文

Typescript 【详解】配置文件 tsconfig.json

用于控制 TypeScript 编译器如何将 .ts 文件编译为 .js 文件

可以使用命令生成

npx tsc --init
{
    "compilerOptions": {
        "target": "ES6",
        "module": "commonjs",
        "strict": true
    },
    "include": ["src/**/*.ts"],
    "exclude": ["node_modules"]
}
  • include:指定需要被 TypeScript 编译器处理的文件或目录
  • exclude:指定不需要被 TypeScript 编译器处理的文件或目录
  • compilerOptions:配置 TypeScript 编译器的行为,比如指定编译目标版本、模块系统、是否开启严格模式等。

compilerOptions

target

指定编译后的 JavaScript 版本,常见的值有 ES3、ES5、ES6(或 ES2015)、ES2016 等,版本越低,兼容性越强,常用 ES5

lib

指定编译过程中需要包含的库文件,比如 ES5、DOM、ESNext 等。如果你使用了 Promise 等 ES6+ 的特性,可能需要包含 ES2015.Promise。

"lib": ["ES2015.Promise", "DOM"]

module

指定生成的模块系统,常见的值有 commonjs、amd、esnext 等。如果你的项目是 Node.js 项目,通常使用 commonjs,现代项目常用 ESNext。

moduleResolution

指定模块解析策略,可选值有 node 和 classic,一般使用 node。

strict(推荐 true)

(值为 true 或 false )开启所有严格类型检查选项,包括 noImplicitAny、strictNullChecks 等,建议开启以提高代码的健壮性。

noImplicitAny

(值为 true 或 false )不允许隐式的 any 类型,即所有变量和函数参数都必须明确指定类型。

strictNullChecks

(值为 true 或 false )开启严格的空值检查,避免使用可能为 null 或 undefined 的值而不进行检查。

outDir

指定编译后的文件输出目录。

rootDir

指定编译文件的根目录,编译器会根据这个目录来确定输出文件的目录结构。

declaration(推荐 true)

(值为 true 或 false )指定 TypeScript 编译器在编译过程中是否生成对应的类型声明文件(.d.ts 文件)

extends

如果你有多个 TypeScript 项目,并且希望共享一些通用的配置,可以使用 extends 字段。它允许你继承另一个 tsconfig.json 文件的配置。

"extends": "./base-tsconfig.json",

files

指定需要编译的具体文件列表,它和 include 的区别在于,files 是指定具体的文件路径,而 include 是使用 glob 模式匹配文件。

"files": ["src/main.ts", "src/utils.ts"]

其他相关知识

tsconfig.node.json 文件,是项目在 node 环境中运行的 Typescript 配置文件

实战范例

{
    "compilerOptions": {
        "target": "ES6",
        "module": "commonjs",
        "lib": ["ES2015", "DOM"],
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true,
        "outDir": "./dist",
        "rootDir": "./src"
    },
    "include": ["src/**/*.ts"],
    "exclude": ["node_modules"]
}

相关文章:

  • aws(学习笔记第二十八课) aws eks使用练习(hands on)
  • Rook-ceph(1.92最新版)
  • Flappy Bird开发学习记录
  • 【Linux】详谈 进程控制
  • 机器学习:二分类和多分类
  • 安卓逆向(Bundle)
  • 把 CSV 文件摄入到 Elasticsearch 中 - CSVES
  • PAT乙级真题 — 1084 外观数列(java)
  • 一口井深7米,一只蜗牛从井底往上爬每天爬3米掉下去1米,问几天能爬上井口?
  • CEF132 编译指南 Linux 篇 - 获取 CEF 源代码:源码同步详解(五)
  • 代码随想录算法训练营Day47
  • 爱彼(Audemars Piguet):瑞士制表艺术的巅峰之作(中英双语)
  • 使用Charles进行mock请求
  • 如何调整 Nginx工作进程数以提升性能
  • 华为ensp IPSEC隧道两端经过nat配置实验!
  • 【kafka系列】Exactly Once语义
  • DeepSeek进阶开发与应用2:DeepSeek中的自定义层与复杂模型构建
  • 【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南
  • SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
  • 如何优雅地使用全局标志位
  • 法治课|争议中的“行人安全距离”于法无据,考量“注意义务”才更合理
  • 复旦大学与上海杨浦共建市东医院
  • 城市轨道交通安全、内河港区布局规划、扎实做好防汛工作……今天的上海市政府常务会议研究了这些重要事项
  • 美英贸易协议|不,这不是一份重大贸易协议
  • 5月12日-14日,上海小升初民办初中进行网上报名
  • 姚洋将全职加盟上海财经大学,担任滴水湖高级金融学院院长